| VIS(1) | General Commands Manual | VIS(1) |
نام (NAME)
vis —
یک
ویرایشگر
متن بسیار
کارآمد
خلاصه دستور (SYNOPSIS)
vis [-v]
[+command]
[--] [files ...]
توضیحات (DESCRIPTION)
vis یک
ویرایشگر
متن
صفحهمحور
بسیار
کارآمد است
که نقاط قوت
هر دو
ویرایشگر
vi(m) و sam
را با
یکدیگر
ترکیب
میکند. این
صفحه
راهنما
برای
کاربرانی
در نظر
گرفته شده
است که از
پیش با
vi/sam
آشنایی
دارند. سایر
کاربران
تقریباً به
طور قطع
باید پیش از
خواندن این
صفحه
راهنما، یک
آموزش
مناسب
درباره هر
یک از این دو
ویرایشگر
مطالعه
کنند.
گزینههای
زیر در
دسترس
هستند:
-v- چاپ اطلاعات نسخه و خروج.
+command- اجرای command پس از بارگذاری فایل.
--- نشاندهنده پایان گزینهها است. آرگومانهای پس از این به عنوان نام فایل در نظر گرفته میشوند.
فایل ویژه
- به vis
دستور
میدهد که
از ورودی
استاندارد
بخواند؛ در
این حالت
:wq در
خروجی
استاندارد
مینویسد و
بدین ترتیب
امکان
استفاده به
عنوان یک
فیلتر
تعاملی را
فراهم
میکند.
اگر ورودی
استاندارد
تغییر مسیر
داده شده
باشد و همه
ورودی مصرف
شود، vis
فایل /dev/tty
را برای
دریافت
دستورهای
بعدی باز
میکند.
ناتوانی در
انجام این
کار منجر به
خاتمه
برنامه
میشود.
گزینشها (Selections)
vis از
گزینشها
(selections) به عنوان
عناصر
بنیادی
ویرایش
استفاده
میکند. یک
گزینش،
محدودهای
جهتدار و
غیرخالی با
دو نقطه
انتهایی به
نامهای
مکاننما
(cursor) و لنگر
(anchor) است. یک
گزینش
میتواند
لنگردار
باشد؛ در
این حالت
لنگر ثابت
میماند در
حالی که
تنها
موقعیت
مکاننما
تغییر داده
میشود.
برای
گزینشهای
بدون لنگر،
هر دو نقطه
انتهایی
بهروزرسانی
میشوند. یک
گزینش
تکعضوی
شامل یک
نویسه است
که هر دو
مکاننما و
لنگر روی آن
قرار دارند.
همواره یک
گزینش اصلی
وجود دارد
که قابل
دیدن باقی
میماند
(یعنی تغییر
موقعیت آن،
دیدگاه یا viewport
را تنظیم
میکند).
حالتها (Modes)
vis از
همان
رویکرد
ویرایش
حالتی (modal)
مشابه vi
استفاده
میکند. این
ویرایشگر
از
حالتهای
‘normal،’ ‘operator pending،’
‘insert،’ ‘replace’ و
‘visual’ (در هر دو
نوع خطی و
نویسهای)
پشتیبانی
میکند.
حالتهای visual
block و ex عمداً
پیادهسازی
نشدهاند؛
در عوض vis
دارای
پشتیبانی
داخلی از
گزینشهای
چندگانه و
یک گونه
تعاملی (interactive)
از زبان
دستوری
مبتنی بر
عبارات
باقاعده
ساختاری
sam است.
در حالت عادی (normal mode) تمام گزینشها بدون لنگر بوده و به یک نویسه کاهش مییابند.
واگردانی/انجام مجدد (Undo/Redo)
vis برای
پیگیری
بازبینیهای
متن از یک
درخت
واگردانی (undo tree)
استفاده
میکند.
دستورهای
u
(واگردانی) و
⟨C-r⟩
(انجام مجدد)
را میتوان
برای
پیمایش
درخت در
امتداد
شاخه اصلی
به کار برد.
g+ و g-
تاریخچه را
به ترتیب
زمانی
پیمایش
میکنند.
دستورهای
:earlier و :later
امکان
بازگردانی
متن به یک
وضعیت
دلخواه را
فراهم
میسازند.
نشانهها (Marks)
یک نشانه (mark)
یک نام
نمادین را
به
مجموعهای
از
گزینشها
مرتبط
میکند. یک
گزینش
ذخیرهشده
هنگامی که
مرزهای
مشخصکننده
آن در بافر
زیرین
تغییر کند،
نامعتبر
میشود. اگر
تغییرات
یادشده
بعداً
واگردانی
شوند،
نشانه
دوباره
معتبر
میگردد.
m یک
نشانه
تنظیم
میکند و
M آن را
بازیابی
مینماید.
به عنوان
مثال،
'am
نشانه a
را تنظیم
میکند، در
حالی که
'aM
آن را
بازیابی
میکند.
استفاده از
m یا M
بدون تعیین
نشانه، از
نشانه
پیشفرض
استفاده
میکند.
نشانههای موجود عبارتند از:
نشانهها در میان فایلهای مختلف پشتیبانی نمیشوند. نشانهها بین نشستهای ویرایش حفظ نمیشوند.
فهرست پرش (Jump list)
یک فهرست پرش (jump list) محلی برای هر پنجره با اندازه ثابت وجود دارد که نشانهها (یعنی مجموعهای از گزینشها) را ذخیره میکند.
ثباتها (Registers)
ثباتها (registers) فهرستهای نامگذاریشدهای از متن هستند. خانههای مقداردهینشده ثباتها به طور پیشفرض رشته خالی هستند. ثباتهای موجود عبارتند از:
""- ثبات پیشفرض
"a–"z- ثباتهای عمومی
"A–"Z- الحاق به ثبات عمومی متناظر
"*,"+- یکپارچهسازی با بریدهدان سیستم از طریق اسکریپت شل vis-clipboard(1)
"0- ثبات کپی (yank)، جدیدترین محدوده کپیشده
"1–"9"&- تطابقهای
زیرعبارت
در آخرین
دستور
xیاy "/- ثبات جستجو، آخرین الگوی جستجوی استفادهشده
":- ثبات دستور، آخرین دستور اجراشده
"_- ثبات سیاهچاله (/dev/null،) محتوا را نادیده میگیرد و همیشه خالی است
"#- شماره گزینش (فقطخواندنی)
".- آخرین متن درجشده
اگر ثبات مشخصی تعیین نشود، از ثبات پیشفرض استفاده میشود.
ماکروها (Macros)
ثباتهای
عمومی
"a–"z
میتوانند
برای ضبط
ماکرو
استفاده
شوند. از یکی
از
ثباتهای
"A–"Z
برای
افزودن به
یک ماکروی
موجود
استفاده
کنید. q
ضبط را آغاز
میکند و
@ آن را
بازپخش
مینماید.
@@ به
آخرین
ماکروی
ضبطشده
اشاره دارد.
@: آخرین
دستور :
را تکرار
میکند. @/
معادل n
در حالت
عادی است.
این
عملیاتها
همواره از
اولین خانه
ثبات
استفاده
میکنند.
مدیریت کدگذاری، تب و خط جدید (Encoding, Tab and Newline handling)
vis
همیشه فرض
میکند که
فایل ورودی
دارای
کدگذاری UTF-8
با پایان
خطهای \n
است. اگر
میخواهید
فایلهایی
با
کدگذاریهای
قدیمی یا
پایان
خطهای غیر
یونیکسی را
ویرایش
کنید، از
iconv(1) و
dos2unix(1)
برای تبدیل
آنها در
صورت نیاز
استفاده
نمایید.
⟨Tab⟩ را
میتوان به
طور
اختیاری به
تعداد قابل
تنظیمی از
فاصلهها
باز کرد (بخش
گزینههای
SET (SET OPTIONS) را
ببینید).
پشتیبانی از ماوس (Mouse support)
ماوس در حال حاضر اصلاً استفاده نمیشود.
دستورهای سام (SAM COMMANDS)
vis از یک
نگارش
تعاملی از
زبان
دستورات
مبتنی بر
عبارات
باقاعده
ساختاری که
توسط
sam(1)
معرفی شد،
پشتیبانی
میکند.
عبارات باقاعده (Regular expressions)
vis در
حال حاضر
تطبیق
عبارات
باقاعده را
به
کتابخانه C
زیرین
واگذار
میکند. این
برنامه از
آنچه
پازیکس
“عبارات
باقاعده
گسترشیافته
(Extended Regular Expressions)”
مینامد،
مطابق
توضیحات
regex(7)
استفاده
میکند.
لنگرهای
^ و $
با ابتدا و
انتهای
محدودهای
که به آن
اعمال
میشوند
تطابق
مییابند.
علاوه بر
این، \n و
\t
میتوانند
به ترتیب
برای اشاره
به خطوط
جدید و
تبها به
کار روند.
اتم . با
هر
نویسهای
به جز خط
جدید
مطابقت
دارد. عبارت
باقاعده
خالی
نشاندهنده
آخرین
عبارت
کاملی است
که با آن
مواجه شده
است.
آدرسها (Addresses)
یک آدرس،
زیررشتهای
(یا
محدودهای)
را در یک
فایل مشخص
میکند. در
ادامه،
“نویسه
n” به
معنای رشته
پوچ پس از
n-امین
نویسه در
فایل است،
که در آن ۱
نویسه اول
فایل است.
“خط n” به
معنای
n-امین
تطابق
عبارت
باقاعده
“.*\n?” با
شروع از
ابتدای
فایل است.
تمام
پنجرهها
همواره
دستکم یک
زیررشته
جاری دارند
که آدرس
پیشفرض
است. در sam به
این مفهوم
dot
(نقطه) گفته
میشود. در
vis چندین
“dot” (یا
گزینش)
میتوانند
همزمان
وجود داشته
باشند.
آدرسهای ساده (Simple addresses)
#n- رشته خالی
پس از نویسه
n ؛
#0ابتدای فایل است. - n
- خط n.
/regexp/?regexp?- زیررشتهای
که با عبارت
باقاعده
مطابقت
دارد، که با
جستجو به
سمت انتهای
(
/) یا ابتدای (?) فایل پیدا میشود. جستجو در هنگام رسیدن به انتهای (ابتدای) فایل به دور خود نمیچرخد (wrap around نمیشود). 0- رشته قبل از
اولین خط
کامل. این
لزوماً
رشته پوچ
نیست؛
+و-را در زیر ببینید. $- رشته پوچ در انتهای فایل.
.- Dot (نقطه)، محدوده جاری.
'm- نشانه m در فایل.
آدرسهای ترکیبی (Compound addresses)
در ادامه، a1 و a2 آدرس هستند.
- a1
+a2 - آدرس a2 که با شروع از انتهای a1 ارزیابی میشود.
- a1
-a2 - آدرس a2 که با شروع از ابتدای a1 و در جهت معکوس ارزیابی میشود.
- a1
,a2 - زیررشته از
ابتدای a1
تا انتهای
a2. اگر
a1 وجود
نداشته
باشد،
0جایگزین میشود. اگر a2 وجود نداشته باشد،$جایگزین میگردد. - a1
;a2 - مانند
a1
,a2 اما a2 در انتهای a1 ارزیابی شده و محدوده روی a1 تنظیم میشود.
عملگرهای
+ و -
دارای
اولویت
بالا
هستند، در
حالی که ,
و ;
اولویت
پایینی
دارند.
در هر دو
حالت + و
-، اگر
a2 یک آدرس
خط یا نویسه
بدون شماره
باشد،
شماره به
طور
پیشفرض ۱
است. اگر a1
وجود
نداشته
باشد، .
جایگزین
میشود. اگر
هر دو a1 و
a2 حاضر و
قابل تشخیص
باشند، +
میتواند
حذف شود. a2
میتواند
یک عبارت
باقاعده
باشد؛ اگر
با
نویسههای
? محدود
شده باشد،
اثر + یا
- معکوس
میشود.
علامت %
نام
مستعاری
برای , و
بنابراین
0,$ است.
نمایش یک
زیررشته
بدشکل توسط
یک آدرس
ترکیبی، یک
خطا محسوب
میشود.
دستورها (Commands)
در ادامه،
متن
مشخصشده
با اسلش
نشاندهنده
متنی است که
با هر نویسه
اَسکی (ASCII)
چاپپذیر
به جز
نویسههای
حرفی-عددی
محدود شده
است. هر
تعداد از
جداکنندههای
پایانی
میتوانند
حذف شوند،
که در این
صورت
حذفهای
متعدد
نشاندهنده
رشتههای
پوچ خواهند
بود، اما
جداکننده
نخست
همواره
باید وجود
داشته باشد.
در هر متن
محدودشده،
خط جدید
نمیتواند
به صورت
لفظی ظاهر
شود؛ \n و
\t را
میتوان
برای خط
جدید و تب
نوشت؛ \/
جداکننده
(در اینجا
/) را
نقلقول (quote)
میکند. یک
علامت اند
& و
\n، که
در آن n یک
رقم (۱ تا ۹)
است، با
ثبات
متناظر
جایگزین
میشوند. در
غیر این
صورت
بکاسلش به
صورت
تحتاللفظی
تفسیر
میشود.
بیشتر
دستورها
میتوانند
پیشوندی از
یک آدرس
داشته
باشند تا
محدوده
عملکرد خود
را مشخص
کنند. اگر
دستوری
آدرس
بپذیرد و
هیچ آدرسی
ارائه
نشود، از یک
آدرس
پیشفرض
استفاده
میشود. در
حالت عادی،
این معادل
نویسهای
است که
گزینش در
حال حاضر
روی آن قرار
دارد. اگر
تنها یک
گزینش وجود
داشته
باشد، x و
y به طور
پیشفرض کل
فایل 0,$
را در نظر
میگیرند.
در حالت
عادی،
دستورهای
نوشتن w و
wq همیشه
روی کل فایل
اعمال
میشوند.
دستورها
برای هر
گزینش
یکبار
اجرا
میشوند. در
حالت
تصویری (visual)،
دستورها به
هر گزینش
اعمال
میشوند،
گویی یک
دستور ضمنی
x وجود
دارد که با
گزینشهای
موجود
مطابقت
دارد.
در توضیحات، واژه «محدوده» (range) برای نشان دادن هر آدرسی که ارائه شده به کار میرود.
بسیاری از دستورها هنگامی که از حالت تصویری صادر میشوند، به عنوان یک اثر جانبی، گزینشهای جدیدی ایجاد میکنند. در این صورت، همواره به «نتیجه» تغییر اشاره دارد: متن جدید برای درج، رشته خالی برای حذف، خروجی دستور یک فیلتر و غیره. اگر پس از اجرای موفقیتآمیز دستور هیچ گزینشی باقی نماند، ویرایشگر به حالت عادی تغییر وضعیت میدهد، در غیر این صورت در حالت تصویری باقی میماند. این امکان بهبود و پالایش تعاملی (interactive) محدودهها را فراهم میسازد.
دستورهای متنی (Text commands)
دستورهای نمایش (Display commands)
p- ایجاد یک گزینش جدید برای محدوده.
دستورهای ورودی/خروجی (I/O commands)
e[!] [file name]- جایگزینی فایل با محتوای فایل خارجی نامبرده. اگر نام فایلی داده نشود، بارگذاری مجدد فایل از دیسک انجام میشود.
rfile name- جایگزینی متن در محدوده با محتوای فایل خارجی نامبرده.
w[!] [file name]- نوشتن
محدوده
(پیشفرض
0,$) در فایل خارجی نامبرده. wq[!] [file name]- مشابه
w، اما بستن فایل پس از آن.
اگر
آرگومان
نام فایل در
هر یک از
اینها
وجود
نداشته
باشد، نام
فایل جاری
استفاده
میشود. e
همواره نام
فایل را
تنظیم
میکند؛
w اگر
فایل
بینام
باشد چنین
خواهد کرد.
اجبار
دستور e
با !
تغییرات
ذخیرهنشده
را نادیده
میگیرد.
اجبار
دستور w
فایل را روی
دیسک
بازنویسی
میکند،
حتی اگر از
زمان
بارگذاری
به صورت
خارجی
تغییر کرده
باشد.
دستورهای
نوشتن با
آدرسهای
غیرپیشفرض
و بدون نام
فایل، مخرب
هستند و
همیشه باید
به صورت
اجباری
اجرا شوند.
<shell command- جایگزینی محدوده با خروجی استاندارد دستور شل.
>shell command- ارسال محدوده به ورودی استاندارد دستور شل.
|shell command- ارسال محدوده به ورودی استاندارد دستور شل، و جایگزینی آن با خروجی استاندارد آن.
!shell command- اجرای دستور شل به صورت تعاملی و هدایت ورودی صفحهکلید به آن.
cddirectory- تغییر
دایرکتوری
کاری. اگر
دایرکتوری
مشخص نشود،
از
$HOMEاستفاده میشود.
در هر یک
از <،
>، |
یا !، اگر
دستور شل
حذف شود،
آخرین
دستور شل (از
هر نوعی)
جایگزین
میگردد.
مگر اینکه
فایل در حال
ویرایش
بینام
باشد، تمام
این
دستورهای
خارجی
میتوانند
از طریق
متغیرهای
محیطی
vis_filepath و
vis_filename به
مسیر مطلق و
نام فایل آن
ارجاع
دهند.
حلقهها و شرطها (Loops and conditionals)
x/regexp/[command]- به ازای هر
تطابق
عبارت
باقاعده در
محدوده،
دستور را با
تنظیم
محدوده روی
تطابق اجرا
میکند. اگر
عبارت
باقاعده و
اسلشهای
آن حذف
شوند، /.*\n/
فرض میشود.
تطابقهای
رشته پوچ به
طور بالقوه
قبل از هر
نویسه از
محدوده و در
انتهای
محدوده رخ
میدهند.
ثباتهای
"1–"9و"&با تطابقهای (زیر) عبارت الگو بهروزرسانی میشوند. y/regexp/[command]- مشابه
x، اما دستور را برای هر زیررشتهای که قبل، بین یا بعد از تطابقهایی که توسطxتولید میشدند قرار دارد اجرا میکند. هیچ رفتار پیشفرضی وجود ندارد. زیررشتههای پوچ به طور بالقوه قبل از هر نویسه در محدوده رخ میدهند. X/regexp/command- برای هر فایلی که نام آن با عبارت باقاعده مطابقت دارد، آن را به فایل جاری تبدیل کرده و دستور را اجرا میکند. اگر عبارت حذف شود، دستور در هر فایل اجرا میشود.
Y/regexp/command- مشابه
X، اما برای فایلهایی که با عبارت باقاعده مطابقت ندارند، و وجود عبارت الزامی است. g[count][/regexp/] commandv[count][/regexp/] command- اگر محدوده
count حاوی
یک تطابق
برای عبارت
باشد (
g) یا نباشد (v)، دستور را روی محدوده اجرا میکند.مشخصکننده count قالب زیر را دارد، که در آن n و m اعداد صحیحی هستند که محدودهها را مشخص میکنند.
- n
,m - بازه بسته
از n تا
m. اگر
n وجود
نداشته
باشد،
1جایگزین میشود. اگر m وجود نداشته باشد،∞جایگزین میشود. مقادیر منفی نسبت به آخرین محدوده تفسیر میشوند. %n- با هر n-امین محدوده مطابقت دارد.
- n
اینها
میتوانند
به طور
دلخواه و
عمیق تو در
تو شوند. یک
دستور خالی
در x یا
y به طور
پیشفرض
p است.
X، Y،
g و v
پیشفرضی
ندارند.
گروهبندی و تغییرات چندگانه (Grouping and multiple changes)
دستورها میتوانند با قرار گرفتن در آکولاد گروهبندی شوند. از نظر معنایی، آکولاد باز مانند یک دستور است: یک آدرس (اختیاری) میپذیرد و هر زیردستور را روی محدوده اجرا میکند. دستورهای درون آکولاد به ترتیب اجرا میشوند، اما تغییرات ایجادشده توسط یک دستور برای دستورهای دیگر قابل مشاهده نیستند.
هنگامی که
یک دستور
تغییراتی
را در یک
فایل ایجاد
میکند،
مانند
x/re/
c/text/،
آدرسهای
تمام
تغییرات بر
اساس وضعیت
اولیه
محاسبه
میشوند.
اگر
تغییرات
همپوشانی
نداشته
باشند، به
ترتیب
مشخصشده
اعمال
میگردند.
تغییرات
دارای
تداخل رد
میشوند.
آکولادها میتوانند به طور دلخواه تو در تو شوند.
کلیدهای میانبر VI(M) (VI(M) KEY BINDINGS)
در
بخشهای
زیر از
براکتهای
زاویهدار
برای نشان
دادن
کلیدهای
ویژه
استفاده
میشود.
پیشوندهای
C-، S- و
M- به
ترتیب برای
اشاره به
کلیدهای
تبدیل ⟨Ctrl،⟩
⟨Shift⟩ و ⟨Alt⟩ به
کار
میروند.
تمام
مقیدسازیهای
فعال کلید
را میتوان
در زمان
اجرا با
استفاده از
دستور :help
فهرست کرد.
عملگرها (Operators)
عملگرها عملیات خاصی را روی یک محدوده متنی که توسط یک حرکت (motion)، یک شیء متنی (text object) یا یک گزینش موجود مشخص شده است، انجام میدهند.
هنگامی که در حالت عادی استفاده میشوند، عملگرهای زیر منتظر یک حرکت میمانند و vis را در حالت در انتظار عملگر (operator pending) قرار میدهند.
c- تغییر، حذف محدوده و ورود به حالت درج
d- حذف، بریدن محدوده به ثبات
<- انتقال به چپ، کاهش تورفتگی
>- انتقال به راست، افزایش تورفتگی
y- کپی (yank)، رونوشت از محدوده به ثبات
هنگامی که در حالت عادی استفاده میشوند، اقدامات زیر بلافاصله اعمال میگردند.
حرکتها (Motions)
حرکتها موقعیت اولیه فایل را گرفته و آن را به موقعیت مقصد تبدیل میکنند، و بدین ترتیب یک محدوده را تعریف مینمایند.
0- ابتدای خط
b- ابتدای کلمه قبلی
B- ابتدای کلمه بزرگ قبلی (WORD)
$- انتهای خط
e- انتهای کلمه بعدی
E- انتهای کلمه بزرگ بعدی (WORD)
F⟨char⟩- به رخداد قبلی ⟨char⟩ در سمت چپ
f⟨char⟩- به رخداد بعدی ⟨char⟩ در سمت راست
^- اولین نویسه غیرفاصله در خط
g0- ابتدای خط نمایشی
g$- انتهای خط نمایشی
ge- انتهای کلمه قبلی
gE- انتهای کلمه بزرگ قبلی (WORD)
gg- ابتدای فایل
G- رفتن به خط یا انتهای فایل
gj- خط نمایشی به پایین
gk- خط نمایشی به بالا
gh- کدپوینت به چپ
gl- کدپوینت به راست
gH- بایت به چپ
gL- بایت به راست
g_- آخرین نویسه غیرفاصله در خط
gm- میانه خط نمایشی
g|- رفتن به ستون
h- نویسه به چپ
H- رفتن به خط بالای پنجره
j- خط به پایین
k- خط به بالا
l- نویسه به راست
L- رفتن به خط پایین پنجره
%- تطابق براکت، گیومه یا بکتیک
}- پاراگراف بعدی
)- جمله بعدی
N- تکرار آخرین جستجو رو به عقب
n- تکرار آخرین جستجو رو به جلو
- [{
- ابتدای بلوک قبلی
- ]}
- ابتدای بلوک بعدی
- [(
- ابتدای جفت پرانتز قبلی
- ])
- ابتدای جفت پرانتز بعدی
- {
- پاراگراف قبلی
- (
- جمله قبلی
- ;
- تکرار آخرین حرکت جستجوی نویسه (to/till)
- ,
- تکرار آخرین حرکت جستجوی نویسه در جهت مخالف
#- جستجوی کلمه زیر گزینش رو به عقب
*- جستجوی کلمه زیر گزینش رو به جلو
T⟨char⟩- تا قبل از رخداد بعدی ⟨char⟩ در سمت چپ
t⟨char⟩- تا قبل از رخداد بعدی ⟨char⟩ در سمت راست
?pattern- به تطابق بعدی pattern در جهت عقب
/pattern- به تطابق بعدی pattern در جهت جلو
w- ابتدای کلمه بعدی
W- ابتدای کلمه بزرگ بعدی (WORD)
اشیاء متنی (Text objects)
اشیاء
متنی یک
موقعیت
اولیه در
فایل را
گرفته و آن
را به
محدودهای
تبدیل
میکنند که
لزوماً
نباید
موقعیت
اولیه در
محدوده
مقصد قرار
داشته باشد.
تمام اشیاء
متنی زیر در
دو نوع
داخلی (با
پیشوند i)
که در آن
فاصلههای
سفید
پیرامون یا
نویسههای
جداکننده
جزئی از
محدوده
حاصل
نیستند، و
نوع عادی (با
پیشوند a)
که در آن
شامل
میشوند،
پیادهسازی
شدهاند.
w- کلمه (word)
W- کلمه بزرگ (WORD)
s- جمله (sentence)
p- پاراگراف (paragraph)
[, ], (, ), {, }, <, >, ", ', `- بلوک محصور شده با این نمادها
اشیاء متنی موجود دیگر عبارتند از:
گزینشهای چندگانه (Multiple Selections)
vis از
گزینشهای
چندگانه با
بازخورد
دیداری
فوری
پشتیبانی
میکند.
همواره یک
گزینش اصلی
وجود دارد
که در
دیدگاه (viewport)
جاری قرار
گرفته است.
گزینشهای
اضافی را
میتوان در
صورت نیاز
ایجاد کرد.
اگر بیش از
یک گزینش
وجود داشته
باشد،
گزینش اصلی
با ظاهری
متفاوت
نمایش داده
میشود.
برای دستکاری گزینشها در حالت عادی، استفاده کنید از:
- ⟨
C-k⟩ - ایجاد count گزینش جدید در خطوط بالایی
- ⟨
C-M-k⟩ - ایجاد count گزینش جدید در خطوط بالای اولین گزینش
- ⟨
C-j⟩ - ایجاد count گزینش جدید در خطوط پایینی
- ⟨
C-M-j⟩ - ایجاد count گزینش جدید در خطوط پایین آخرین گزینش
- ⟨
C-p⟩ - حذف گزینش اصلی
- ⟨
C-n⟩ - انتخاب کلمهای که گزینش روی آن قرار دارد، تغییر حالت به visual
- ⟨
C-u⟩ - تبدیل گزینش count قبلی به گزینش اصلی
- ⟨
C-d⟩ - تبدیل گزینش count بعدی به گزینش اصلی
- ⟨
C-c⟩ - حذف ستون گزینش شماره count
- ⟨
C-l⟩ - حذف همه به جز ستون گزینش شماره count
- ⟨
Tab⟩ - تلاش برای همتراز کردن همه گزینشها در یک ستون
- ⟨
Escape⟩ - کنار گذاشتن همه گزینشها به جز گزینش اصلی
حالتهای visual برای تشخیص موارد زیر بهبود یافتهاند:
I- ایجاد یک گزینش در ابتدای هر خط انتخابشده
A- ایجاد یک گزینش در انتهای هر خط انتخابشده
- ⟨
Tab⟩ - چپچین کردن گزینشها با درج فاصله
- ⟨
S-Tab⟩ - راستچین کردن گزینشها با درج فاصله
- ⟨
C-a⟩ - ایجاد گزینشهای جدید در تمام موارد مطابق با کلمه یا گزینش جاری
- ⟨
C-n⟩ - ایجاد گزینش جدید و انتخاب کلمه بعدی مطابق با گزینش جاری
- ⟨
C-x⟩ - پاک کردن (رد شدن از) گزینش جاری، اما انتخاب کلمه منطبق بعدی
- ⟨
C-p⟩ - حذف گزینش اصلی
- ⟨
C-u⟩ ⟨C-k⟩ - تبدیل گزینش count قبلی به اصلی
- ⟨
C-d⟩ ⟨C-j⟩ - تبدیل گزینش count بعدی به اصلی
- ⟨
C-c⟩ - حذف ستون گزینش شماره count
- ⟨
C-l⟩ - حذف همه به جز ستون گزینش شماره count
+- چرخاندن گزینشها به راست به تعداد count بار
-- چرخاندن گزینشها به چپ به تعداد count بار
_- پیرایش گزینشها، حذف فاصلههای سفید ابتدا و انتها
o- معکوس کردن جهت گزینش، جابجایی مکاننما و لنگر
- ⟨
Escape⟩ - پاک کردن تمام گزینشها، تغییر حالت به normal
در حالت درج و جایگزینی:
- ⟨
S-Tab⟩ - همتراز کردن تمام گزینشها با درج فاصله
گزینشها
را میتوان
با استفاده
از عملیات
مجموعهای
دستکاری
کرد. عملوند
نخست،
گزینشهای
فعال کنونی
است در حالی
که عملوند
دوم
میتواند
به عنوان یک
نشانه مشخص
شود. برای
نمونه،
'a|
اجتماع
نشانه a و
گزینش جاری
را حاصل
میکند.
استفاده از
عملیات
مجموعهای
بدون تعیین
یک نشانه،
از نشانه
پیشفرض به
عنوان
عملوند
نخست
استفاده
میکند.
دستورهای VI(M) (VI(M) COMMANDS)
هر پیشوند یکتا میتواند برای کوتاه کردن یک دستور به کار رود.
مدیریت فایل و پنجره (File and Window management)
یک فایل
باید حداقل
در یک پنجره
باز باشد.
اگر آخرین
پنجرهای
که فایل
مشخصی را
نمایش
میدهد
بسته شود،
تمام
تغییرات
ذخیرهنشده
دور ریخته
میشوند.
پنجرهها
دارای
اندازه
یکسان
هستند و
میتوانند
در سطرها
(افقی) یا
ستونها
(عمودی)
نمایش داده
شوند.
نگاشتهای
کلید ⟨C-w⟩
h،
⟨C-w⟩
j،
⟨C-w⟩ k
و ⟨C-w⟩
l
میتوانند
برای
جابجایی
بین
پنجرهها
استفاده
شوند.
:new- باز کردن یک پنجره خالی، مرتبشده به صورت یک سطر جدید (افقی)
:vnew- باز کردن یک پنجره خالی، مرتبشده به صورت یک ستون جدید (عمودی)
:open[!] [file name]- باز کردن پنجرهای جدید، و نمایش نام فایل در صورت ارائه
:split[file name]- تقسیم افقی پنجره به سطرها
:vsplit[file name]- تقسیم عمودی پنجره به ستونها
:q[!] [exit code]- بستن پنجره دارای تمرکز کنونی
:qall[!] [exit code]- بستن تمام پنجرهها، خاتمه ویرایشگر با کد خروج (پیشفرض 0)
دستورهایی که نام فایل میپذیرند، اگر یک الگو یا دایرکتوری به آنها داده شود، ابزار vis-open(1) را فراخوانی خواهند کرد.
نگاشتهای کلید زمان اجرا (Runtime key mappings)
vis از
نگاشتهای
کلید
سراسری و
همچنین
محلی پنجره
در زمان
اجرا
پشتیبانی
میکند که
همواره به
طور
بازگشتی
ارزیابی
میشوند.
:map[!] mode lhs rhs- افزودن نگاشت کلید سراسری
:map-window[!] mode lhs rhs- افزودن نگاشت کلید محلی پنجره
:unmapmode lhs- حذف نگاشت کلید سراسری
:unmap-windowmode lhs- حذف نگاشت کلید محلی پنجره
در بالا،
mode به یکی
از موارد
‘normal،’
‘insert،’
‘replace،’
‘visual،’
‘visual-line’ یا
‘operator-pending’
اشاره
دارد؛ lhs
به کلیدی
اشاره دارد
که باید
نگاشت شود و
rhs یک کنش
کلید یا نام
مستعار است.
یک نگاشت
موجود ممکن
است با
اجبار
دستور map از
طریق تعیین
!
بازنویسی
شود.
از آنجا که نگاشتهای کلید همیشه بازگشتی هستند، کاری مانند:
:map! normal j 2jکار
نخواهد کرد
زیرا وارد
یک حلقه
بیپایان
میشود. در
عوض، vis
از
شبهکلیدهایی
استفاده
میکند که
کنشهای
کلید (key actions)
نامیده
میشوند و
میتوان از
آنها برای
فراخوانی
مجموعهای
از توابع
موجود
ویرایشگر
استفاده
کرد. دستور
:help تمام
مقیدسازیهای
فعال کلید و
همچنین
تمام
کلیدهای
نمادین
موجود را
فهرست
میکند.
نگاشتهای ویژه چینش صفحهکلید (Keyboard Layout Specific Mappings)
به منظور
تسهیل
استفاده از
چینشهای
صفحهکلید
غیرلاتین،
vis امکان
نگاشت
کلیدهای
ویژه محلی
به
معادلهای
لاتین
آنها را از
طریق
دستور
:langmap
locale-keys latin-keysفراهم میکند. به عنوان مثال، دستور زیر کلیدهای حرکتی را در چینش روسی نگاشت میکند:
:langmap
ролд hjklاگر طول دنبالههای کلید یکسان نباشد، بخش اضافی دنباله طولانیتر نادیده گرفته میشود.
نگاشتهای تعریفشده در تمام حالتهای غیرورودی، یعنی همهجا به جز حالتهای insert و replace اعمال میشوند.
واگردانی/انجام مجدد (Undo/Redo)
اگر پسوند d (روزها،) h (ساعتها،) m (دقیقهها) یا s (ثانیهها) به count اضافه شود، به عنوان فاصلهای از زمان جاری سیستم تفسیر شده و نزدیکترین وضعیت متنی موجود بازیابی میگردد.
گزینههای SET (SET OPTIONS)
تعداد
اندکی
گزینه وجود
دارد که
میتوان
آنها را با
دستور :set
تنظیم (یا
لغو تنظیم)
کرد تا
رفتار
ویرایشگر
تغییر یابد.
این بخش
گزینهها،
اختصارات و
مقادیر
پیشفرض
آنها را
شرح میدهد.
گزینههای
دودویی
(بولی) را
میتوان با
افزودن !
به انتهای
نام گزینه
تغییر
وضعیت داد.
در هر مورد زیر، بخش نخست خط برچسب، نام کامل گزینه و به دنبال آن اختصارات معادل آن است. بخش داخل کروشه، مقدار پیشفرض گزینه است.
shell[“/bin/sh”]- شل کاربر
برای
استفاده در
دستورهای
خارجی؛
متغیر
SHELLو فیلد شل در پایگاه داده گذرواژه /etc/passwd را نادیده میگیرد. escdelay[50]- میلیثانیههای
انتظار پیش
از
تصمیمگیری
در مورد
اینکه آیا
یک دنباله
گریز (escape sequence)
باید به
عنوان یک
کلید
⟨
Escape⟩ تلقی شود یا خیر. tabwidth,tw[8]- عرض نمایشی
یک تب و
تعداد
فاصلههای
مورد
استفاده در
صورت فعال
بودن
expandtab. autoindent,ai[off]- تورفتگی خودکار خطوط جدید با کپی کردن فاصلههای خالی از خط قبلی.
expandtab,et[off]- اینکه آیا
⟨
Tab⟩ باید به تعدادtabwidthفاصله باز شود یا خیر. numbers,nu[off]- نمایش شماره خطوط به صورت مطلق.
relativenumbers,rnu[off]- نمایش شماره خطوط به صورت نسبی.
numberwidth,nuw[0]- حداقل عرض
نوار کناری
هنگامی که
نوار کناری
با
numberیاrelativenumbersفعال شده است. cursorline,cul[off]- برجستهسازی خطی که مکاننمای اصلی روی آن قرار دارد.
colorcolumn,cc[0]- برجستهسازی یک ستون مشخص و ثابت.
horizon[32768]- تحلیلگر لغوی (lexer) چه تعداد بایت به عقب بازمیگردد تا تجزیه را همگامسازی کند.
theme[“default-16” or “default-256”]- تم رنگی مورد استفاده، نام بدون پسوند فایل. از یک زیردایرکتوری themes/ در مسیرهای فهرستشده در بخش فایلها (FILES) بارگذاری میشود.
syntax[auto]- تحلیلگر لغوی برای برجستهسازی نحوی، نام بدون پسوند فایل.
showtabs[off]- آیا نماد جایگزین به جای تبها نمایش داده شود یا خیر.
shownewlines[off]- آیا نماد جایگزین به جای خطوط جدید نمایش داده شود یا خیر.
showspaces[off]- آیا نماد جایگزین به جای خانههای خالی نمایش داده شود یا خیر.
showeof[on]- آیا نماد جایگزین برای خطوط پس از انتهای فایل نمایش داده شود یا خیر.
savemethod[auto]- نحوه ذخیره فایل جاری؛ atomic که از rename(2) برای جایگزینی اتمیک فایل استفاده میکند، inplace که فایل را کوتاه (truncate) کرده و سپس آن را بازنویسی میکند، یا auto که پیش از رجوع به روش دوم، روش اول را امتحان میکند. روش تغییر نام (rename) برای پیوندهای نمادین، پیوندهای سخت، در صورت ناکافی بودن مجوزهای دایرکتوری، یا هنگامی که مالک فایل، گروه، ACL پازیکس یا برچسبهای SELinux نتوانند بازیابی شوند شکست میخورد.
loadmethod[auto]- نحوه بارگذاری فایلهای موجود؛ read که محتوای فایل را در یک بافر حافظه مستقل کپی میکند، mmap که فایل را از دیسک در حافظه نگاشت (memory map) کرده و از قابلیتهای سیستمعامل به عنوان لایه حافظه موقت (کَش) استفاده میکند، یا auto که برای فایلهای کوچکتر از 8 مگابایت روش اول و برای فایلهای بزرگتر روش دوم را امتحان میکند. هشدار: تغییر درجا (in-place) روی فایلی که در حافظه نگاشت شده باعث از دست رفتن دادهها میشود.
layout[“v” or “h”]- استفاده از چیدمان عمودی یا افقی.
ignorecase,ic[off]- نادیده گرفتن بزرگی و کوچکی حروف در هنگام جستجو.
wrapcolumn,wc[0]- پیچیدن خطوط در حداقلِ عرض پنجره و wrapcolumn.
breakat,brk[“”]- نویسههایی که ممکن است باعث شکستن خط (word wrap) شوند.
اعلان دستور و جستجو (COMMAND AND SEARCH PROMPT)
اعلان
دستور و
جستجو که با
:، / یا
? باز
میشود، به
صورت
پنجرهای
با ارتفاع
یک خط
پیادهسازی
شده است که
یک فایل
عادی را
نمایش
میدهد و
ویرایش آن
در حالت insert
آغاز
میشود.
⟨Escape⟩ به
حالت normal
تغییر
وضعیت
میدهد؛
دومین
⟨Escape⟩
اعلان را
لغو میکند.
⟨Up⟩
پنجره را
بزرگتر
کرده و
دسترسی به
تاریخچه
دستورات را
فراهم
میسازد.
⟨C-v⟩
⟨Enter⟩ یک
خط جدید
تحتاللفظی
درج میکند
و بدین
ترتیب
امکان
استفاده از
دستورهای
چندخطی را
فراهم
میسازد.
⟨Enter⟩
گزینش
تصویری را
در صورت
وجود اجرا
میکند،
وگرنه هر
آنچه را که
در ناحیه
میان
موقعیت
گزینش و
نمادهای
جداکننده
اعلان در
ابتدای
خطوط مجاور
قرار دارد
اجرا خواهد
کرد.
پیکربندی (CONFIGURATION)
vis از
زبان Lua برای
پیکربندی و
اسکریپتنویسی
استفاده
میکند. در
هنگام
راهاندازی،
فایل visrc.lua
(بخش
فایلها
(FILES) را
ببینید)
خوانده و
اجرا
میشود که
میتوان از
آن برای
اعمال
تنظیمات
پیکربندی
شخصی
استفاده
کرد. به
عنوان مثال
دستور زیر
نمایش
شماره خطوط
را فعال
میکند:
vis:command('set
number')محیط (ENVIRONMENT)
VIS_PATH- مسیر پیشفرض برای بارگذاری فایلهای پشتیبانی Lua.
HOME- دایرکتوری
خانگی مورد
استفاده
برای دستور
cdدر صورتی که هیچ آرگومانی داده نشود. TERM- نوع ترمینال مورد استفاده برای مقداردهی اولیه واسط curses؛ در صورت عدم تعیین، مقدار پیشفرض xterm است.
SHELL- شل دستوری
مورد
استفاده
برای
دستورهای
مربوط به
ورودی/خروجی
مانند
!،>،<و|. XDG_CONFIG_HOME- دایرکتوری پیکربندی مورد استفاده؛ در صورت عدم تعیین، مقدار پیشفرض $HOME/.config است.
رویدادهای ناهمگام (ASYNCHRONOUS EVENTS)
SIGSTOP- تعلیق ویرایشگر.
SIGCONT- از سرگیری ویرایشگر.
SIGBUS- یک فایل نگاشتشده در حافظه (mmap(2)) کوتاه (truncate) شد؛ محتویات ذخیرهنشده فایل از دست خواهد رفت.
SIGHUPSIGTERM- بازگردانی وضعیت اولیه ترمینال. محتویات ذخیرهنشده فایل از دست خواهد رفت.
SIGINT- هنگامی که در حین اجرای یک دستور خارجی یک وقفه رخ دهد، آن دستور پایان مییابد.
SIGWINCH- اندازه صفحه نمایش تغییر میکند.
فایلها (FILES)
در زمان
راهاندازی،
vis اولین
فایل
پیکربندی
visrc.lua
یافتشده
از میان این
مکانها را
بارگذاری
میکند.
تمام
مسیرهای
فعال کنونی
را میتوان
در زمان
اجرا با
استفاده از
دستور :help
فهرست کرد.
- $VIS_PATH
- محل فایل
اجرایی
vis(در سیستمهایی که /proc/self/exe در دسترس است). - $XDG_CONFIG_HOME/vis که
در آن
XDG_CONFIG_HOMEدر صورت عدم مقداردهی به $HOME/.config اشاره دارد. - /etc/vis برای پیکربندی سراسری سیستم که توسط مدیر سیستم ارائه میشود.
- /usr/local/share/vis یا
/usr/share/vis بسته
به
پیکربندی
ساخت.
هنگام ایجاد یک visrc.lua جدید، حتماً ساختار را از اینجا کپی کنید.
وضعیت خروج (EXIT STATUS)
The vis utility exits 0 on success,
and >0 if an error occurs.
مثالها (EXAMPLES)
استفاده
از vis به
عنوان یک
فیلتر
تعاملی.
$ { echo Pick your number; seq 1 10;
} | vis - > choiceاستفاده از مرورگر فایل مبتنی بر vis-open(1) برای فهرست کردن تمام فایلهای منبع زبان C:
:e *.cاجرای فرایند در پسزمینه و لولهکشی (pipe) محدوده به ورودی استاندارد آن:
:> { plumber <&3
3<&- & } 3<&0 1>&- 2>&-همچنین ببینید (SEE ALSO)
sam(1), vi(1), vis-clipboard(1), vis-complete(1), vis-digraph(1), vis-menu(1), vis-open(1)
A Tutorial for the Sam Command Language نوشته Rob Pike
The Text Editor sam نوشته Rob Pike
Structural Regular Expressions نوشته Rob Pike
vi - screen-oriented (visual) display editor IEEE Std 1003.1 (“POSIX.1”)
استانداردها (STANDARDS)
vis
تلاشی برای
سازگاری با
IEEE Std 1003.1 (“POSIX.1”)
نمیکند،
اما
شباهتهای
آشکاری با
ابزار vi
دارد.
نویسندگان (AUTHORS)
vis توسط
Marc André Tanner ⟨mat at
brain-dump.org⟩ نوشته
شده است.
گزارش باگها (BUGS)
در برخی
سیستمها
از پیش یک
باینری با
نام vis
وجود دارد
که باعث
تداخل نام
میشود.
| May 14, 2026 | Vis v0.9-498-gad0f1deb-dirty |