| ZSHZLE(1) | General Commands Manual | ZSHZLE(1) |
نام (NAME)
zshzle - ویرایشگر خط فرمان زیشل (Zsh Line Editor)
توضیحات (DESCRIPTION)
اگر گزینه ZLE تنظیم شده باشد (که به طور پیشفرض در شلهای تعاملی چنین است) و ورودی شل به ترمینال متصل باشد، کاربر قادر به ویرایش خطوط فرمان خواهد بود.
دو حالت نمایش وجود دارد. نخست، حالت چندخطی (multiline) است که حالت پیشفرض است. این حالت تنها زمانی کار میکند که پارامتر TERM روی نوع ترمینال معتبری تنظیم شده باشد که بتواند مکاننما را به سمت بالا حرکت دهد. دوم، حالت تکخطی (single line) است و زمانی استفاده میشود که TERM نامعتبر باشد یا توانایی حرکت مکاننما به سمت بالا را نداشته باشد، یا اگر گزینه SINGLE_LINE_ZLE تنظیم شده باشد. این حالت مشابه ksh است و از هیچ توالی termcap استفاده نمیکند. اگر TERM برابر "emacs" باشد، گزینه ZLE به طور پیشفرض غیرفعال خواهد شد.
پارامترهای BAUD، COLUMNS و LINES نیز توسط ویرایشگر خط استفاده میشوند. به بخش Parameters Used By The Shell در zshparam(1) مراجعه کنید.
پارامتر zle_highlight نیز توسط ویرایشگر خط استفاده میشود؛ به بخش برجستهسازی نویسهها (Character Highlighting) در ادامه مراجعه کنید. برجستهسازی نویسههای خاص و ناحیه میان مکاننما و نشانگر (همانطور که با set-mark-command در حالت Emacs، یا با visual-mode در حالت Vi تنظیم میشود) به طور پیشفرض فعال است؛ برای اطلاعات بیشتر به مرجع مذکور مراجعه کنید. کاربرانی که تمایلی به استفاده از این ویژگی ندارند میتوانند تمام برجستهسازیها را با تنظیم زیر غیرفعال کنند:
zle_highlight=(none)
در بسیاری از بخشها، به آرگومان عددی (numeric argument) اشاره شده است. این مقدار به طور پیشفرض در حالت emacs با نگه داشتن کلید alt و تایپ یک عدد، یا فشردن escape قبل از هر رقم، و در حالت فرمان vi با تایپ عدد قبل از وارد کردن دستور وارد میشود. به طور کلی آرگومان عددی باعث میشود دستور بعدی وارد شده به تعداد دفعات مشخصشده تکرار شود، مگر اینکه در ادامه خلاف آن قید شده باشد؛ این ویژگی توسط ویجت digit-argument پیادهسازی شده است. همچنین به زیربخش Arguments از بخش Widgets برای روشهای دیگر تغییر آرگومان عددی مراجعه کنید.
نقشهکلیدها (KEYMAPS)
یک نقشهکلید در ZLE شامل مجموعهای از نگاشتها میان توالیهای کلید و دستورات ZLE است. توالی کلید خالی قابل نگاشت نیست.
در هر زمان میتواند به هر تعداد نقشهکلید وجود داشته باشد و هر نقشهکلید یک یا چند نام دارد. اگر تمام نامهای یک نقشهکلید حذف شوند، از بین میرود. از bindkey میتوان برای مدیریت نامهای نقشهکلید استفاده کرد.
در ابتدا، هشت نقشهکلید وجود دارد:
- emacs
- شبیهسازی EMACS
- viins
- شبیهسازی vi - حالت درج (insert mode)
- vicmd
- شبیهسازی vi - حالت فرمان (command mode)
- viopp
- شبیهسازی vi - در انتظار عملگر (operator pending)
- visual
- شبیهسازی vi - انتخاب فعال (selection active)
- isearch
- حالت جستجوی افزایشی (incremental search)
- command
- خواندن نام دستور
- .safe
- نقشهکلید پشتیبان (fallback)
نقشهکلید `.safe' ویژه است. این نقشهکلید هرگز تغییر نمیکند و نام آن هرگز حذف نمیشود. با این حال میتوان آن را به نامهای دیگر پیوند داد که قابل حذف هستند. در آینده ممکن است نقشهکلیدهای ویژه دیگری اضافه شوند؛ کاربران باید از به کار بردن نامهایی که با `.' شروع میشوند برای نقشهکلیدهای خود خودداری کنند.
علاوه بر این نامها، یکی از نقشهکلیدهای `emacs' یا `viins' نیز به نام `main' پیوند داده میشود. اگر یکی از متغیرهای محیطی VISUAL یا EDITOR هنگام راهاندازی شل حاوی رشته `vi' باشد، برابر با `viins' خواهد بود، در غیر این صورت `emacs' خواهد بود. گزینههای -e و -v از bindkey روش مناسبی برای بازنویسی این انتخاب پیشفرض ارائه میدهند.
هنگامی که ویرایشگر شروع به کار میکند، نقشهکلید `main' را انتخاب میکند. اگر این نقشهکلید وجود نداشته باشد، به جای آن از `.safe' استفاده میکند.
در نقشهکلید `.safe'، هر تککلید به self-insert نگاشت شده است، به جز ^J (تغذیه خط / line feed) و ^M (بازگشت / return) که به accept-line نگاشت شدهاند. این طراحی عمداً ناخوشایند است؛ اگر از آن استفاده میکنید، به این معنی است که نقشهکلید اصلی (main) را حذف کردهاید و باید آن را بازگردانید.
خواندن دستورات (Reading Commands)
هنگامی که ZLE در حال خواندن دستوری از ترمینال است، ممکن است توالیای را بخواند که به دستوری نگاشت شده و در عین حال پیشوند رشته نگاشتشده طولانیتری است. در این حالت ZLE زمان مشخصی صبر میکند تا ببیند آیا نویسههای بیشتری تایپ میشوند یا خیر، و اگر تایپ نشوند (یا با رشته طولانیتری مطابقت نداشته باشند) نگاشت را اجرا میکند. این زمان وقفه توسط پارامتر KEYTIMEOUT تعریف میشود؛ پیشفرض آن 0.4 ثانیه است. اگر رشته پیشوند خود به دستوری نگاشت نشده باشد، هیچ وقفهای وجود ندارد.
زمان وقفه کلید همچنین هنگامی اعمال میشود که ZLE در حال خواندن بایتها از یک رشته نویسه چندبایتی در حالت مناسب است. (این نیاز دارد که شل با حالت چندبایتی فعال کامپایل شده باشد؛ به طور معمول همچنین محلی (locale) دارای نویسههایی با کدگذاری UTF-8 است، هرچند هر کدگذاری چندبایتی شناختهشده برای سیستمعامل پشتیبانی میشود.) اگر بایت دوم یا بعدی در مدت زمان وقفه خوانده نشود، شل طوری عمل میکند که گویی ? تایپ شده است و وضعیت ورودی را بازنشانی میکند.
همانند دستورات ZLE، توالیهای کلید را میتوان با استفاده از `bindkey -s' به رشتههای دیگر نگاشت کرد. هنگامی که چنین توالیای خوانده میشود، رشته جایگزین به عنوان ورودی بازگردانده میشود و فرآیند خواندن دستور با استفاده از این فشردنهای کلید شبیهسازیشده دوباره آغاز میشود. این ورودی خود میتواند رشتههای جایگزین بیشتری را فراخوانی کند، اما برای تشخیص حلقهها در صورتی که بیست بار از این جایگزینیها بدون خوانده شدن یک دستور واقعی انجام شود، فرآیند متوقف خواهد شد.
یک توالی کلید تایپشده توسط کاربر را میتوان با ویجت read-command که در زیربخش `متفرقه (Miscellaneous)' از بخش `ویجتهای استاندارد (Standard Widgets)' در ادامه شرح داده شده است، به نام یک دستور برای استفاده در ویجتهای تعریفشده توسط کاربر تبدیل کرد.
نقشهکلیدهای محلی (Local Keymaps)
در حالی که برای ویرایش معمولی منحصراً از یک نقشهکلید استفاده میشود، در بسیاری از حالتها یک نقشهکلید محلی امکان سفارشیسازی برخی کلیدها را فراهم میکند. برای مثال، در حالت جستجوی افزایشی، نگاشت موجود در نقشهکلید isearch نگاشت موجود در نقشهکلید main را بازنویسی میکند، اما تمام کلیدهایی که بازنویسی نشدهاند همچنان قابل استفاده هستند.
اگر توالی کلیدی در یک نقشهکلید محلی تعریف شود، توالی کلیدی در نقشهکلید سراسری را که پیشوندی از آن توالی است پنهان میکند. نمونهای از این مورد در نگاشت iw در viopp رخ میدهد، زیرا نگاشت i در vicmd را پنهان میکند. با این حال، توالی طولانیتری در نقشهکلید سراسری که پیشوند یکسانی دارد همچنان میتواند اعمال شود؛ بنابراین برای مثال نگاشت ^Xa در نقشهکلید سراسری تحت تأثیر نگاشت ^Xb در نقشهکلید محلی قرار نخواهد گرفت.
دستورات توکار زیالای (ZLE BUILTINS)
ماژول ZLE شامل سه دستور توکار مرتبط است. دستور bindkey نقشهکلیدها و نگاشتهای کلید را مدیریت میکند؛ دستور vared ویرایشگر ZLE را روی مقدار یک پارامتر شل فراخوانی میکند؛ و دستور zle ویجتهای ویرایش را مدیریت کرده و امکان دسترسی خط فرمان به دستورات ZLE را از درون توابع شل فراهم میسازد.
- bindkey [ گزینهها ] -l [ -L ] [ keymap ... ]
- bindkey [ گزینهها ] -d
- bindkey [ گزینهها ] -D keymap ...
- bindkey [ گزینهها ] -A old-keymap new-keymap
- bindkey [ گزینهها ] -N new-keymap [ old-keymap ]
- bindkey [ گزینهها ] -m
- bindkey [ گزینهها ] -r in-string ...
- bindkey [ گزینهها ] -s in-string out-string ...
- bindkey [ گزینهها ] in-string command ...
- bindkey [ گزینهها ] [ in-string ]
- گزینههای bindkey را میتوان به سه دسته تقسیم کرد: انتخاب نقشهکلید برای دستور جاری، انتخاب عملیات و موارد دیگر. گزینههای انتخاب نقشهکلید عبارتند از:
- -e
- نقشهکلید `emacs' را برای تمام عملیات دستور جاری انتخاب میکند، و همچنین `emacs' را به `main' پیوند میدهد تا دفعه بعد که ویرایشگر شروع به کار میکند به طور پیشفرض انتخاب شود.
- -v
- نقشهکلید `viins' را برای تمام عملیات دستور جاری انتخاب میکند، و همچنین `viins' را به `main' پیوند میدهد تا دفعه بعد که ویرایشگر شروع به کار میکند به طور پیشفرض انتخاب شود.
- -a
- نقشهکلید `vicmd' را برای تمام عملیات دستور جاری انتخاب میکند.
- -M keymap
- نام یک نقشهکلید را مشخص میکند که برای تمام عملیات دستور جاری انتخاب میشود.
اگر انتخاب نقشهکلید لازم باشد و هیچیک از گزینههای بالا استفاده نشوند، از نقشهکلید `main' استفاده میشود. برخی عملیات اجازه انتخاب نقشهکلید را نمیدهند، یعنی:
- -l
- فهرست تمام نامهای نقشهکلید موجود را نمایش میدهد؛ اگر آرگومانی ارائه شود، تنها همان نقشهکلیدها فهرست میشوند.
اگر گزینه -L نیز استفاده شود، فهرست به صورت دستورات bindkey برای ایجاد یا پیوند نقشهکلیدها نمایش داده میشود. دستور `bindkey -lL main' نشان میدهد کدام نقشهکلید به `main' پیوند خورده است (در صورت وجود)، و از این رو مشخص میکند که آیا شبیهسازی استاندارد emacs یا vi فعال است یا خیر. این گزینه نقشهکلید .safe را نمایش نمیدهد زیرا نمیتوان آن را با این روش ایجاد کرد؛ با این حال، `bindkey -lL .safe' به عنوان خطا نیز گزارش نمیشود و خروجی خالی خواهد بود.
- -d
- تمام نقشهکلیدهای موجود را حذف کرده و به وضعیت پیشفرض بازنشانی میکند.
- -D keymap ...
- نقشهکلیدهای نامبرده را حذف میکند.
- -A old-keymap new-keymap
- نام new-keymap را به یک نام مستعار برای old-keymap تبدیل میکند، به طوری که هر دو نام به یک نقشهکلید اشاره دارند. نامها ارزش یکسانی دارند؛ اگر هر کدام حذف شود، دیگری باقی میماند. اگر از قبل نقشهکلیدی با نام new-keymap وجود داشته باشد، حذف میشود.
- -N new-keymap [ old-keymap ]
- یک نقشهکلید جدید به نام new-keymap ایجاد میکند. اگر نقشهکلیدی از قبل آن نام را داشته باشد، حذف میشود. اگر نام old-keymap داده شود، نقشهکلید جدید به صورت رونوشتی از آن مقداردهی اولیه میشود، در غیر این صورت نقشهکلید جدید خالی خواهد بود.
برای استفاده از یک نقشهکلید تازهایجادشده، باید آن را به main پیوند داد. بنابراین توالی دستورات برای ایجاد و استفاده از یک نقشهکلید جدید `mymap' که از نقشهکلید emacs مقداردهی اولیه شده (و خود بدون تغییر میماند) عبارت است از:
bindkey -N mymap emacs bindkey -A mymap main
توجه داشته باشید در حالی که `bindkey -A newmap main' زمانی که newmap برابر emacs یا viins باشد کار میکند، برای vicmd کار نخواهد کرد، زیرا جابهجایی از حالت درج vi به حالت فرمان غیرممکن میشود.
عملیات زیر اگر گزینه انتخاب نقشهکلید داده نشده باشد، روی نقشهکلید `main' عمل میکنند:
- -m
- مجموعه توکار نگاشتهای کلید متا (meta-key) را به نقشهکلید انتخابی اضافه میکند. تنها کلیدهایی که نگاشتنشده هستند یا به self-insert نگاشت شدهاند تحت تأثیر قرار میگیرند.
- -r in-string ...
- نگاشت in-stringهای مشخصشده را در نقشهکلید انتخابی حذف میکند. این عمل دقیقاً معادل نگاشت رشتهها به undefined-key است.
هنگامی که -R نیز استفاده شود، in-stringها به عنوان محدوده تفسیر میشوند.
هنگامی که -p نیز استفاده شود، in-stringها پیشوندها را مشخص میکنند. هر نگاشتی که in-string دادهشده را به عنوان پیشوند داشته باشد، به جز نگاشت خود in-string (در صورت وجود)، حذف خواهد شد. برای مثال،
bindkey -rpM viins '^['
تمام نگاشتهای موجود در نقشهکلید vi-insert را که با نویسه escape شروع میشوند (احتمالاً کلیدهای مکاننما) حذف میکند، اما نگاشت خود نویسه escape را باقی میگذارد (احتمالاً vi-cmd-mode). این گزینه با گزینه -R ناسازگار است.
- -s in-string out-string ...
- هر in-string را به هر out-string نگاشت میکند. هنگامی که in-string تایپ شود، out-string بازگردانده شده و به عنوان ورودی به ویرایشگر خط تحویل داده میشود. هنگامی که -R نیز استفاده شود، in-stringها به عنوان محدوده تفسیر میشوند.
توجه داشته باشید که هر دو رشته in-string و out-string مشمول همان شکل تفسیر هستند که در ادامه شرح داده شده است.
- in-string command ...
- هر in-string را به هر command نگاشت میکند. هنگامی که -R استفاده شود، in-stringها به عنوان محدوده تفسیر میشوند.
- [ in-string ]
- فهرست نگاشتهای کلید را نمایش میدهد. اگر in-string مشخص شود، نگاشت آن رشته در نقشهکلید انتخابی نمایش داده میشود. در غیر این صورت، تمام نگاشتهای کلید در نقشهکلید انتخابی نمایش داده میشوند. (به عنوان یک حالت خاص، اگر گزینه -e یا -v به تنهایی استفاده شود، نقشهکلید نمایش داده نمیشود - تنها پیوند ضمنی نقشهکلیدها اتفاق میافتد.)
هنگامی که گزینه -p استفاده شود، in-string باید حضور داشته باشد. فهرست تمام نگاشتهایی را نشان میدهد که توالی کلید دادهشده را به عنوان پیشوند دارند، بدون شامل کردن هرگونه نگاشت برای خود توالی کلید.
هنگامی که گزینه -L استفاده شود، فهرست به شکل دستورات bindkey برای ایجاد نگاشتهای کلید خواهد بود.
هنگامی که گزینه -R همانطور که در بالا اشاره شد استفاده شود، یک محدوده معتبر شامل دو نویسه است که یک `-' اختیاری میان آنها قرار دارد. تمام نویسههای میان دو نویسه مشخصشده، به صورت فراگیر، مطابق با دستور نگاشت میشوند.
برای هر یک از in-string یا out-string، توالیهای گریز (escape) زیر شناسایی میشوند:
- \a
- نویسه زنگ (bell)
- \b
- پسبر (backspace)
- \e, \E
- فرار (escape)
- \f
- تغذیه برگه (form feed)
- \n
- تغذیه خط (linefeed / newline)
- \r
- بازگشت مکاننما (carriage return)
- \t
- تب افقی (horizontal tab)
- \v
- تب عمودی (vertical tab)
- \NNN
- کد نویسه در مبنای هشت (octal)
- \xNN
- کد نویسه در مبنای شانزده (hexadecimal)
- \uNNNN
- کد نویسه یونیکد در مبنای شانزده
- \UNNNNNNNN
- کد نویسه یونیکد در مبنای شانزده
- \M[-]X
- نویسه با بیت متا فعال (meta bit set)
- \C[-]X
- نویسه کنترلی
- ^X
- نویسه کنترلی
در تمام موارد دیگر، `\' نویسه بعدی را اسکیپ میکند. کلید Delete به صورت `^?' نوشته میشود. توجه داشته باشید که `\M^?' و `^\M?' یکسان نیستند، و اینکه (برخلاف emacs)، نگاشتهای `\M-X' و `\eX' کاملاً متمایز هستند، اگرچه با دستور `bindkey -m' به نگاشتهای یکسانی مقداردهی اولیه میشوند.
- vared [ -Aacghe ] [ -p prompt ] [ -r rprompt ]
- [ -M main-keymap ] [ -m vicmd-keymap ]
- [ -i init-widget ] [ -f finish-widget ]
- [ -t tty ] name
- مقدار پارامتر name در بافر ویرایش بارگذاری شده و ویرایشگر خط فراخوانی میشود. هنگامی که ویرایشگر خارج میشود، name روی مقدار رشتهای بازگرداندهشده توسط ویرایشگر تنظیم میشود. هنگامی که گزینه -c داده شود، در صورتی که پارامتر از قبل وجود نداشته باشد ایجاد میشود. گزینه -a ممکن است همراه با -c برای ایجاد یک پارامتر آرایه داده شود، یا گزینه -A برای ایجاد یک آرایه انجمنی (associative array). اگر نوع یک پارامتر موجود با نوعی که قرار است ایجاد شود مطابقت نداشته باشد، پارامتر لغو تنظیم (unset) شده و دوباره ایجاد میشود. گزینه -g ممکن است برای سرکوب هشدارهای ناشی از گزینههای WARN_CREATE_GLOBAL و WARN_NESTED_VAR داده شود.
اگر یک آرایه یا برشی از یک آرایه در حال ویرایش باشد، نویسههای جداکننده همانطور که در $IFS تعریف شدهاند با یک بکاسلش نقلقولشده نمایش داده میشوند، همانند خود بکاسلشها. متقابلاً، هنگامی که متن ویرایششده به یک آرایه تقسیم میشود، یک بکاسلش نویسه جداکننده بلافاصله پس از خود یا بکاسلش را نقلقول میکند؛ هیچ پردازش خاص دیگری روی بکاسلشها، یا پردازش نقلقولها، انجام نمیشود.
عناصر منفرد پارامترهای آرایه یا آرایه انجمنی موجود را میتوان با استفاده از نحو زیرنویس (subscript) روی name ویرایش کرد. عناصر جدید به طور خودکار ایجاد میشوند، حتی بدون گزینه -c.
اگر گزینه -p داده شود، رشته بعدی به عنوان پرامپت برای نمایش در سمت چپ در نظر گرفته میشود. اگر گزینه -r داده شود، رشته بعدی پرامپت را برای نمایش در سمت راست مشخص میکند. اگر گزینه -h مشخص شود، میتوان از درون ZLE به تاریخچه دسترسی داشت. اگر گزینه -e داده شود، فشردن ^D (Control-D) روی یک خط خالی باعث خروج فوری vared با مقدار بازگشتی غیرصفر میشود.
گزینه -M یک نقشهکلید برای پیوند به نقشهکلید main در حین ویرایش تعیین میکند، و گزینه -m یک نقشهکلید برای پیوند به نقشهکلید vicmd در حین ویرایش مشخص میکند. برای ویرایش به سبک vi، این امکان به یک جفت نقشهکلید داده میشود تا viins و vicmd را بازنویسی کنند. برای ویرایش به سبک emacs، معمولاً تنها -M مورد نیاز است اما گزینه -m نیز همچنان قابل استفاده است. هنگام خروج، نقشهکلیدهای قبلی بازیابی خواهند شد.
دستور vared هوکهای معمول `zle-line-init' و `zle-line-finish' را قبل و بعد از به دست گرفتن کنترل فراخوانی میکند. با استفاده از گزینههای -i و -f، میتوان این موارد را با سایر ویجتهای سفارشی جایگزین کرد.
اگر `-t tty' داده شود، tty نام یک دستگاه ترمینال است که باید به جای پیشفرض /dev/tty استفاده شود. اگر tty به یک ترمینال اشاره نکند، خطا گزارش میشود.
- zle
- zle -l [ -L | -a ] [ string ... ]
- zle -D widget ...
- zle -A old-widget new-widget
- zle -N widget [ function ]
- zle -f flag [ flag... ]
- zle -C widget completion-widget function
- zle -R [ -c ] [ display-string ] [ string ... ]
- zle -M string
- zle -U string
- zle -K keymap
- zle -F [ -L | -w ] [ fd [ handler ] ]
- zle -I
- zle -T [ tc function | -r tc | -L ]
- zle widget [ -n num ] [ -f flag ] [ -Nw ] [ -K keymap ] args ...
- دستور توکار zle اقدامات متعددی را در رابطه با ZLE انجام میدهد.
بدون گزینه و بدون آرگومان، تنها وضعیت بازگشتی تنظیم میشود. اگر ZLE در حال حاضر فعال باشد و ویجتها بتوانند با استفاده از این دستور توکار فراخوانی شوند، وضعیت صفر و در غیر این صورت غیرصفر خواهد بود. توجه داشته باشید که حتی اگر وضعیت غیرصفر بازگردانده شود، ممکن است zle همچنان به عنوان بخشی از سیستم تکمیل خودکار فعال باشد؛ این حالت اجازه فراخوانی مستقیم ویجتهای ZLE را نمیدهد.
در غیر این صورت، عملیاتی که انجام میدهد به گزینههای آن بستگی دارد:
- -l [ -L | -a ] [ string ]
- فهرست تمام ویجتهای تعریفشده توسط کاربر موجود را نمایش میدهد. اگر گزینه -L استفاده شود، فهرست به شکل دستورات zle برای ایجاد ویجتها نمایش داده میشود.
هنگامی که با گزینه -a ترکیب شود، تمام نامهای ویجتها، از جمله ویجتهای توکار، فهرست میشوند. در این حالت گزینه -L نادیده گرفته میشود.
اگر حداقل یک string داده شود، و -a وجود داشته باشد یا -L استفاده نشده باشد، چیزی چاپ نخواهد شد. اگر تمام stringها نامهای ویجتهای موجود باشند وضعیت بازگشتی صفر و اگر حداقل یک string نام یک ویجت تعریفشده نباشد غیرصفر خواهد بود. اگر -a نیز وجود داشته باشد، تمام نامهای ویجت از جمله ویجتهای توکار برای مقایسه استفاده میشوند، در غیر این صورت فقط ویجتهای تعریفشده توسط کاربر بررسی میشوند.
اگر حداقل یک string وجود داشته باشد و از گزینه -L استفاده شود، ویجتهای تعریفشده توسط کاربر که با هر string مطابقت دارند به شکل دستورات zle برای ایجاد ویجتها فهرست میشوند.
- -D widget ...
- ویجتهای نامبرده را حذف میکند.
- -A old-widget new-widget
- نام new-widget را به یک نام مستعار برای old-widget تبدیل میکند، به طوری که هر دو نام به یک ویجت اشاره دارند. نامها ارزش یکسانی دارند؛ اگر هر کدام حذف شود، دیگری باقی میماند. اگر از قبل ویجتی با نام new-widget وجود داشته باشد، حذف میشود.
- -N widget [ function ]
- یک ویجت تعریفشده توسط کاربر ایجاد میکند. اگر از قبل ویجتی با نام مشخصشده وجود داشته باشد، بازنویسی میشود. هنگامی که ویجت جدید از درون ویرایشگر فراخوانی شود، تابع شل مشخصشده function فراخوانی میشود. اگر هیچ نام تابعی مشخص نشده باشد، به طور پیشفرض همان نام ویجت خواهد بود. برای اطلاعات بیشتر، به بخش `ویجتها (Widgets)' در ادامه مراجعه کنید.
- -f flag [ flag... ]
- فلگهای مختلفی را روی ویجت در حال اجرا تنظیم میکند. مقادیر ممکن برای flag عبارتند از:
yank برای نشان دادن اینکه ویجت متنی را به داخل بافر بازگردانی (یانک) کرده است. اگر ویجت در حال بستهبندی (wrap) یک ویجت داخلی موجود است، اقدام دیگری لازم نیست، اما اگر متن را به صورت دستی درج کرده است، باید دقت کند که YANK_START و YANK_END را به درستی تنظیم کند. yankbefore همین کار را انجام میدهد اما زمانی استفاده میشود که متن بازگردانیشده پس از مکاننما ظاهر شود.
kill برای نشان دادن اینکه متن حذف شده و به cutbuffer انتقال یافته است. هنگام فراخوانی مکرر یک ویجت kill، متن به جای جایگزینی، به cutbuffer الحاق میشود؛ اما هنگام بستهبندی چنین ویجتهایی، لازم است `zle -f kill' فراخوانی شود تا این اثر حفظ گردد.
vichange برای نشان دادن اینکه ویجت نمایانگر یک تغییر در vi است که میتواند به طور کامل با `vi-repeat-change' تکرار شود. این فلگ باید در اوایل تابع قبل از بررسی مقدار NUMERIC یا فراخوانی سایر ویجتها تنظیم شود. این فلگ برای ویجتی که از حالت درج فراخوانی شده باشد تأثیری ندارد. اگر هنگام پایان ویجت حالت درج فعال باشد، تغییر تا بازگشت بعدی به حالت فرمان امتداد مییابد.
- -C widget completion-widget function
- یک ویجت تکمیل خودکار تعریفشده توسط کاربر به نام widget ایجاد میکند. این ویجت تکمیل خودکار مانند ویجت تکمیل توکاری عمل خواهد کرد که نام آن به عنوان completion-widget داده شده است. برای تولید گزینههای تکمیل، تابع شل function فراخوانی خواهد شد. برای اطلاعات بیشتر، به zshcompwid(1) مراجعه کنید.
- -R [ -c ] [ display-string ] [ string ... ]
- خط فرمان را مجدداً نمایش میدهد. اگر یک display-string داده شود و خالی نباشد، در خط وضعیت (دقیقاً زیر خط در حال ویرایش) نمایش داده میشود.
اگر stringهای اختیاری داده شوند، در زیر پرامپت دقیقاً مانند لیستهای تکمیل خودکار چاپ میشوند. اگر هیچ stringی داده نشود اما گزینه -c استفاده شود، چنین لیستی پاک میشود.
توجه داشته باشید که بلافاصله پس از بازگشت از اجرای ویجتها، خط فرمان مجدداً نمایش داده شده و رشتههای نمایشدادهشده پاک خواهند شد. بنابراین، این گزینه تنها برای ویجتهایی مفید است که بلافاصله پس از استفاده از آن خارج نمیشوند.
این دستور را میتوان با اطمینان خارج از ویجتهای تعریفشده توسط کاربر فراخوانی کرد؛ اگر zle فعال باشد، نمایش تازهسازی میشود، در حالی که اگر zle فعال نباشد، دستور هیچ اثری ندارد. در این حالت معمولاً آرگومان دیگری وجود نخواهد داشت.
وضعیت در صورت فعال بودن zle برابر صفر و در غیر این صورت یک است.
- -M string
- همانند گزینه -R، رشته string در زیر خط فرمان نمایش داده خواهد شد؛ برخلاف گزینه -R، این رشته در خط وضعیت قرار نخواهد گرفت بلکه به طور عادی زیر پرامپت چاپ خواهد شد. این بدان معناست که string همچنان پس از بازگشت ویجت نمایش داده خواهد شد (تا زمانی که توسط دستورات بعدی رونویسی شود).
- -U string
- این گزینه نویسههای موجود در string را به پشته ورودی ZLE وارد میکند. پس از پایان اجرای ویجت فعلی، ZLE طوری عمل خواهد کرد که گویی نویسههای موجود در string توسط کاربر تایپ شدهاند.
از آنجا که ZLE از یک پشته استفاده میکند، اگر این گزینه به صورت مکرر استفاده شود، آخرین رشته واردشده به پشته ابتدا پردازش خواهد شد. با این حال، نویسهها در هر string به همان ترتیبی که در رشته ظاهر شدهاند پردازش میشوند.
- -K keymap
- نقشهکلید نامبرده keymap را انتخاب میکند. اگر چنین نقشهکلیدی وجود نداشته باشد، پیام خطا نمایش داده خواهد شد.
این انتخاب نقشهکلید روی تفسیر فشردنهای کلید بعدی در این فراخوانی ZLE تأثیر میگذارد. هر فراخوانی بعدی (مانند خط فرمان بعدی) طبق معمول با نقشهکلید `main' انتخابشده آغاز خواهد شد.
- -F [ -L | -w ] [ fd [ handler ] ]
- تنها در صورتی در دسترس است که سیستم شما از یکی از فراخوانهای سیستمی `poll' یا `select' پشتیبانی کند؛ اکثر سیستمهای امروزی چنین هستند.
تابع handler (نام یک تابع شل) را برای رسیدگی به ورودی از توصیفگر فایل fd نصب میکند. نصب یک کنترلکننده (handler) برای یک fd که از قبل مدیریت میشود باعث جایگزینی کنترلکننده موجود خواهد شد. هر تعداد کنترلکننده برای هر تعداد توصیفگر فایل خواندنی را میتوان نصب کرد. توجه داشته باشید که zle هنگام نصب کنترلکننده هیچ تلاشی برای بررسی خواندنی بودن واقعی fd انجام نمیدهد. کاربر باید ترتیبات لازم را برای مدیریت توصیفگر فایل در زمان غیرفعال بودن zle اتخاذ کند.
هنگامی که zle در حال تلاش برای خواندن دادهها است، هم ترمینال و هم فهرست fdهای مدیریتشده را بررسی میکند. اگر دادهای روی یک fd تحت مدیریت در دسترس قرار گیرد، zle تابع handler را با همان fd که آماده خواندن است به عنوان آرگومان اول فراخوانی میکند. در شرایط عادی این تنها آرگومان است، اما اگر خطایی شناسایی شده باشد، آرگومان دوم جزئیات را ارائه میدهد: `hup' برای قطع اتصال، `nval' برای توصیفگر بسته یا نامعتبر، یا `err' برای هر شرایط دیگر. سیستمهایی که تنها از فراخوان سیستمی `select' پشتیبانی میکنند همیشه از `err' استفاده میکنند.
اگر گزینه -w نیز داده شود، handler در عوض یک ویجت ویرایشگر خط خواهد بود، معمولاً یک تابع شل که با استفاده از `zle -N' به یک ویجت تبدیل شده است. در این حالت handler میتواند از تمام امکانات zle برای بهروزرسانی خط ویرایش جاری استفاده کند. با این حال توجه داشته باشید که از آنجا که رسیدگی به fd در سطح پایین رخ میدهد، تغییرات روی صفحه نمایش به طور خودکار ظاهر نمیشوند؛ ویجت باید `zle -R' را برای اجبار به بازنمایش فراخوانی کند. در حال حاضر، کنترلکنندههای ویجت تنها از یک آرگومان پشتیبانی میکنند و بنابراین هرگز رشته وضعیت خطا به آنها ارسال نمیشود، لذا ویجتها باید خودشان آماده آزمایش توصیفگر باشند.
اگر هر یک از انواع کنترلکنندهها خروجی روی ترمینال تولید کند، باید قبل از این کار `zle -I' را فراخوانی کند (به ادامه مراجعه کنید). کنترلکنندهها نباید تلاشی برای خواندن از ترمینال انجام دهند.
اگر هیچ handlerی داده نشود، اما یک fd موجود باشد، هر کنترلکنندهای برای آن fd حذف میشود. اگر هیچ کنترلی وجود نداشته باشد، پیام خطا چاپ شده و وضعیت 1 بازگردانده میشود.
اگر هیچ آرگومانی داده نشود، یا گزینه -L ارائه شود، فهرستی از کنترلکنندهها به شکلی چاپ میشود که بتوان آن را برای اجرای بعدی ذخیره کرد.
یک fd (اما نه یک handler) ممکن است به صورت اختیاری همراه با گزینه -L داده شود؛ در این حالت، تابع در صورت وجود کنترلکننده آن را فهرست کرده، و در غیر این صورت بدون هیچ پیامی وضعیت 1 را بازمیگرداند.
توجه داشته باشید که از این ویژگی باید با احتیاط استفاده شود. فعالیت روی یکی از fdها که به درستی مدیریت نشود میتواند باعث غیرقابل استفاده شدن ترمینال گردد. حذف یک کنترلکننده fd از درون تله سیگنال (signal trap) ممکن است باعث رفتارهای غیرقابل پیشبینی شود.
در اینجا یک مثال ساده از استفاده از این ویژگی آورده شده است. با استفاده از دستور ztcp یک اتصال به درگاه TCP راه دور ایجاد میشود؛ به توضیحات ماژول zsh/net/tcp در zshmodules(1) مراجعه کنید. سپس یک کنترلکننده نصب میشود که صرفاً هر دادهای را که روی این اتصال دریافت شود چاپ میکند. توجه داشته باشید که اگر طرف مقابل اتصال را بسته باشد، `select' نشان میدهد که توصیفگر فایل نیاز به رسیدگی دارد؛ ما این موضوع را با بررسی شکست خواندن مدیریت میکنیم.
if ztcp pwspc 2811; then
tcpfd=$REPLY
handler() {
zle -I
local line
if ! read -r line <&$1; then
# select marks this fd if we reach EOF,
# so handle this specially.
print "[Read on fd $1 failed, removing.]" >&2
zle -F $1
return 1
fi
print -r - $line
}
zle -F $tcpfd handler
fi
- -I
- این گزینه بر خلاف معمول، بیشترین کاربرد را خارج از توابع ویجت معمولی دارد، اگرچه در صورت نیاز به خروجی عادی به ترمینال میتوان از آن در داخل ویجت نیز استفاده کرد. این گزینه نمایش فعلی zle را در آمادهسازی برای خروجی باطل میکند؛ به طور معمول این کار از درون یک تابع تله (trap function) انجام میشود. اگر zle فعال نباشد هیچ اثری ندارد. هنگامی که یک تله خارج میشود، شل بررسی میکند که آیا نمایش نیاز به بازیابی دارد یا خیر، بنابراین کد زیر خروجی را طوری چاپ میکند که خط در حال ویرایش به هم نخورد:
TRAPUSR1() {
# Invalidate zle display
[[ -o zle ]] && zle -I
# Show output
print Hello
}
به طور کلی، تابع تله ممکن است نیاز داشته باشد قبل از استفاده از این روش فعال بودن zle را بررسی کند (همانطور که در مثال نشان داده شده است)، زیرا ممکن است ماژول zsh/zle حتی بارگذاری نشده باشد؛ در این صورت، میتوان از دستور صرفنظر کرد.
امکان فراخوانی چندباره `zle -I' قبل از بازگشت کنترل به ویرایشگر وجود دارد؛ نمایش تنها بار اول باطل میشود تا اختلال به حداقل برسد.
توجه داشته باشید که به طور معمول روشهای بهتری برای تغییر نمایش از درون ویجتهای zle وجود دارد؛ برای مثال `zle -R' را در بالا ببینید.
وضعیت بازگرداندهشده در صورت باطل شدن zle صفر است، حتی اگر این کار با فراخوانی قبلی به `zle -I' یا اعلان سیستمی انجام شده باشد. برای بررسی اینکه آیا در این نقطه میتوان یک ویجت zle را فراخوانی کرد، zle را بدون آرگومان اجرا کرده و وضعیت بازگشتی را بررسی کنید.
- -T
- این گزینه برای افزودن، فهرست کردن یا حذف تبدیلهای داخلی روی پردازشهای انجامشده توسط ویرایشگر خط استفاده میشود. این گزینه معمولاً فقط برای اشکالزدایی یا آزمایش استفاده میشود و بنابراین برای کاربران عمومی اهمیت چندانی ندارد.
دستور `zle -T transformation func' مشخص میکند که transformation دادهشده (به ادامه مراجعه کنید) توسط تابع شل func اعمال شود.
دستور `zle -Tr transformation' تبدیل دادهشده را در صورت وجود حذف میکند (اگر وجود نداشته باشد خطا محسوب نمیشود).
از `zle -TL' میتوان برای فهرست کردن تمام تبدیلهایی که در حال حاضر فعال هستند استفاده کرد.
در حال حاضر تنها تبدیل موجود tc است. این تبدیل به جای خروجی دادن کدهای termcap به ترمینال استفاده میشود. هنگامی که تبدیل فعال است، کد termcap که قرار بود خروجی داده شود به عنوان آرگومان اول به تابع شل ارسال میشود؛ اگر عملیات به یک آرگومان عددی نیاز داشت، آن مقدار به عنوان آرگومان دوم ارسال میشود. این تابع باید متغیر شل REPLY را روی کد termcap تغییریافته تنظیم کند. معمولاً از این ویژگی برای تولید یک نسخه ساده قالببندیشده از کد و آرگومان اختیاری برای اشکالزدایی یا آزمایش استفاده میشود. توجه داشته باشید که این تبدیل روی سایر نویسههای غیرقابل چاپ مانند carriage return و newline اعمال نمیشود.
- widget [ -n num ] [ -f flag ] [ -Nw ] [ -K keymap ] args ...
- ویجت مشخصشده widget را فراخوانی میکند. این کار تنها زمانی قابل انجام است که ZLE فعال باشد؛ معمولاً این کار در یک ویجت تعریفشده توسط کاربر انجام میشود.
با گزینههای -n و -N، آرگومان عددی فعلی ذخیره شده و پس از فراخوانی widget بازیابی میشود؛ `-n num' آرگومان عددی را موقتاً روی num تنظیم میکند، در حالی که `-N' آن را به حالت پیشفرض (یعنی گویی هیچ آرگومانی وجود ندارد) تنظیم میکند.
با گزینه -K، نقشهکلید keymap به عنوان نقشهکلید جاری در طول اجرای ویجت استفاده خواهد شد. هنگام خروج ویجت، نقشهکلید قبلی بازیابی خواهد شد.
به طور معمول، فراخوانی ویجت به این روش پارامتر ویژه WIDGET و پارامترهای مرتبط را تنظیم نمیکند، به طوری که محیط طوری به نظر میرسد که گویی ویجت سطح بالایی که توسط کاربر فراخوانی شده همچنان فعال است. با گزینه -w، پارامتر WIDGET و پارامترهای مرتبط تنظیم میشوند تا ویجتی را که توسط فراخوانی zle اجرا میشود منعکس کنند.
به طور معمول، هنگامی که widget بازمیگردد پارامتر ویژه LASTWIDGET به آن اشاره خواهد کرد. این رفتار را میتوان با ارسال گزینه -f nolast مهار کرد.
هر آرگومان دیگری به ویجت ارسال خواهد شد؛ توجه داشته باشید که از آنجا که مدیریت استاندارد آرگومانها انجام میشود، هر لیست آرگومان عمومی باید با -- شروع شود. اگر ویجت یک تابع شل باشد، اینها به عنوان پارامترهای مکانی ارسال میشوند؛ برای ویجتهای توکار بستگی به ویجت مربوطه دارد که با آنها چه کند. در حال حاضر آرگومانها تنها توسط دستورات جستجوی افزایشی، history-search-forward و -backward و توابع متناظر با پیشوند vi-، و توسط universal-argument پردازش میشوند. اگر دستور از آرگومانها استفاده نکند، یا تنها از برخی از آنها استفاده کند، هیچ خطایی داده نمیشود.
وضعیت بازگشتی نشاندهنده موفقیت یا شکست عملیات انجامشده توسط ویجت است، یا اگر یک ویجت تعریفشده توسط کاربر باشد وضعیت بازگشتی تابع شل را منعکس میکند.
وضعیت بازگشتی غیرصفر باعث میشود شل هنگام خروج ویجت بوق (beep) بزند، مگر اینکه گزینه BEEP غیرفعال شده باشد یا ویجت از طریق دستور zle فراخوانی شده باشد. بنابراین اگر یک ویجت تعریفشده توسط کاربر نیاز به بوق فوری داشته باشد، باید مستقیماً ویجت beep را فراخوانی کند.
ویجتهای زیالای (ZLE WIDGETS)
تمام اقدامات در ویرایشگر توسط «ویجتها (widgets)» انجام میشوند. وظیفه یک ویجت صرفاً انجام دادن یک اقدام کوچک است. دستورات ZLE که توالیهای کلید در نقشهکلیدها به آنها نگاشت شدهاند در واقع ویجت هستند. ویجتها میتوانند توسط کاربر تعریف شده یا توکار باشند.
ویجتهای استاندارد تعبیهشده در ZLE در بخش `ویجتهای استاندارد (Standard Widgets)' در ادامه فهرست شدهاند. سایر ویجتهای توکار میتوانند توسط ماژولهای دیگر تعریف شوند (به zshmodules(1) مراجعه کنید). هر ویجت توکار دو نام دارد: نام متعارف معمولی خود، و همان نام با پیشوند `.'. نام `.' ویژه است: نمیتوان آن را دوباره به ویجت دیگری نگاشت کرد. این ویژگی باعث میشود ویجت حتی زمانی که نام معمول آن بازتعریف شده است در دسترس باقی بماند.
ویجتهای تعریفشده توسط کاربر با استفاده از `zle -N' تعریف شده و به صورت توابع شل پیادهسازی میشوند. هنگامی که ویجت اجرا میشود، تابع شل مربوطه اجرا شده و میتواند اقدامات ویرایشی (یا غیر آن) را انجام دهد. توصیه میشود ویجتهای تعریفشده توسط کاربر نامهایی داشته باشند که با `.' شروع نشوند.
ویجتهای تعریفشده توسط کاربر (USER-DEFINED WIDGETS)
ویجتهای تعریفشده توسط کاربر، از آنجا که به صورت توابع شل پیادهسازی میشوند، میتوانند هر دستور عادی شل را اجرا کنند. آنها همچنین میتوانند سایر ویجتها را (چه توکار و چه تعریفشده توسط کاربر) با استفاده از دستور توکار zle اجرا کنند. ورودی استاندارد تابع از /dev/null تغییر مسیر داده شده است تا از مسدود شدن ناخواسته ZLE توسط دستورات خارجی با خواندن از ترمینال جلوگیری شود، اما میتوان از read -k یا read -q برای خواندن نویسهها استفاده کرد. در نهایت، آنها میتوانند با خواندن و تنظیم پارامترهای ویژه شرح داده شده در زیر، بافر ZLE در حال ویرایش را بررسی و ویرایش کنند.
این پارامترهای ویژه همیشه در توابع ویجت در دسترس هستند، اما در خارج از ZLE به هیچ وجه خاص نیستند. اگر مقدار عادی خاصی در خارج از ZLE داشته باشند، آن مقدار موقتاً غیرقابل دسترسی است، اما با خروج تابع ویجت بازخواهد گشت. این پارامترهای ویژه در واقع دارای حوزه محلی (local scope) هستند، مانند پارامترهایی که در یک تابع با استفاده از local ایجاد میشوند.
درون ویجتهای تکمیل خودکار و تلههایی که در زمان فعال بودن ZLE فراخوانی میشوند، این پارامترها به صورت فقطخواندنی در دسترس هستند.
توجه داشته باشید که پارامترها در هر ویجت ZLE که در آن ظاهر میشوند به صورت محلی عمل میکنند. بنابراین اگر بازنویسی آنها مد نظر باشد، باید در یک تابع تو در تو انجام شود:
widget-function() {
# $WIDGET در اینجا به متغیر ویژهای اشاره دارد
# که در داخل widget-function محلی است
() {
# این تابع تودرتوی ناشناس اجازه میدهد WIDGET
# به عنوان یک متغیر محلی استفاده شود. سوییچ -h
# وضعیت ویژه متغیر را حذف میکند.
local -h WIDGET
}
}
- BUFFER (اسکالر)
- کل محتویات بافر ویرایش. اگر در آن نوشته شود، مکاننما در همان آفست باقی میماند، مگر اینکه این کار آن را خارج از بافر قرار دهد.
- BUFFERLINES (عدد صحیح)
- تعداد خطوط صفحه نمایش مورد نیاز برای بافر ویرایش که در حال حاضر روی صفحه نمایش داده شده است (یعنی بدون تغییرات اعمالشده در پارامترهای قبلی پس از آخرین بازنمایش)؛ فقطخواندنی.
- CONTEXT (اسکالر)
- زمینهای که zle برای خواندن یک خط فراخوانی شده است؛ فقطخواندنی. یکی از مقادیر زیر:
- CURSOR (عدد صحیح)
- آفست مکاننما در داخل بافر ویرایش. این مقدار در محدوده 0 تا $#BUFFER است و طبق تعریف برابر با $#LBUFFER میباشد. تلاش برای حرکت دادن مکاننما به خارج از بافر منجر به انتقال مکاننما به انتهای مناسب بافر خواهد شد.
- CUTBUFFER (اسکالر)
- آخرین آیتم بریدهشده با استفاده از یکی از دستورات `kill-'؛ رشتهای که دستور yank بعدی در خط درج خواهد کرد. ورودیهای بعدی در حلقه حذف (kill ring) در آرایه killring قرار دارند. توجه داشته باشید که از دستور `zle copy-region-as-kill string' میتوان برای تنظیم متن cutbuffer از یک تابع شل و چرخاندن حلقه حذف به همان روش حذف تعاملی متن استفاده کرد.
- HISTNO (عدد صحیح)
- شماره تاریخچه جاری. تنظیم این مقدار همان اثر حرکت به بالا یا پایین در تاریخچه به خط تاریخچه متناظر را دارد. در صورتی که خط در تاریخچه ذخیره نشده باشد، تلاش برای تنظیم آن نادیده گرفته میشود. توجه داشته باشید که این پارامتر با HISTCMD که همیشه شماره خط تاریخچه در حال اضافه شدن به تاریخچه شل اصلی را نشان میدهد یکسان نیست. HISTNO به خط در حال بازیابی در داخل zle اشاره دارد.
- ISEARCHMATCH_ACTIVE (عدد صحیح)
- ISEARCHMATCH_START (عدد صحیح)
- ISEARCHMATCH_END (عدد صحیح)
- پارامتر ISEARCHMATCH_ACTIVE نشان میدهد که آیا بخشی از BUFFER در حال حاضر با یک الگوی جستجوی افزایشی مطابقت دارد یا خیر. پارامترهای ISEARCHMATCH_START و ISEARCHMATCH_END مکان بخش مطابقتیافته را مشخص میکنند و واحدهای یکسانی با CURSOR دارند. آنها تنها زمانی برای خواندن معتبر هستند که ISEARCHMATCH_ACTIVE غیرصفر باشد.
تمام این پارامترها فقطخواندنی هستند.
- KEYMAP (اسکالر)
- نام نقشهکلید انتخابشده در حال حاضر؛ فقطخواندنی.
- KEYS (اسکالر)
- کلیدهای تایپشده برای فراخوانی این ویجت، به صورت رشته لغوی؛ فقطخواندنی.
- KEYS_QUEUED_COUNT (عدد صحیح)
- تعداد بایتهای بازگرداندهشده به صف ورودی و در نتیجه در دسترس برای خواندن فوری قبل از انجام هرگونه I/O؛ فقطخواندنی. همچنین به PENDING مراجعه کنید؛ این دو مقدار متمایز هستند.
- killring (آرایه)
- آرایه آیتمهای قبلاً حذفشده، با آخرین آیتم حذفشده در ابتدا. این آرایه آیتمهایی را که توسط یک yank-pop بازیابی میشوند به همان ترتیب ارائه میدهد. با این حال توجه داشته باشید که آخرین آیتم حذفشده در $CUTBUFFER قرار دارد؛ $killring آرایه ورودیهای قبلی را نشان میدهد.
اندازه پیشفرض برای kill ring هشت است، با این حال طول آن ممکن است با عملیات عادی آرایه تغییر کند. هر رشته خالی در kill ring توسط دستور yank-pop نادیده گرفته میشود، بنابراین اندازه آرایه عملاً حداکثر طول kill ring را تعیین میکند، در حالی که تعداد رشتههای غیرصفر طول فعلی را نشان میدهد، هر دو همانطور که توسط کاربر در خط فرمان دیده میشود.
- LASTABORTEDSEARCH (اسکالر)
- آخرین رشته جستجوی استفادهشده توسط یک جستجوی تعاملی که توسط کاربر لغو شده است (وضعیت 3 بازگرداندهشده توسط ویجت جستجو).
- LASTSEARCH (اسکالر)
- آخرین رشته جستجوی استفادهشده توسط یک جستجوی تعاملی؛ فقطخواندنی. این مقدار حتی در صورت ناموفق بودن جستجو (وضعیت 0، 1 یا 2 بازگرداندهشده توسط ویجت جستجو) تنظیم میشود، اما در صورت لغو شدن توسط کاربر تنظیم نخواهد شد.
- LASTWIDGET (اسکالر)
- نام آخرین ویجتی که اجرا شده است؛ فقطخواندنی.
- LBUFFER (اسکالر)
- بخشی از بافر که در سمت چپ موقعیت مکاننما قرار دارد. اگر مقداری به آن اختصاص داده شود، فقط آن بخش از بافر جایگزین میشود و مکاننما میان $LBUFFER جدید و $RBUFFER قدیمی باقی میماند.
- MARK (عدد صحیح)
- مشابه CURSOR، اما برای نشانگر (mark). در عملگرهای حالت vi که منتظر یک دستور حرکتی برای انتخاب یک ناحیه از متن هستند، تنظیم MARK اجازه میدهد انتخاب در هر دو جهت از موقعیت اولیه مکاننما گسترش یابد.
- NUMERIC (عدد صحیح)
- آرگومان عددی. اگر هیچ آرگومان عددی داده نشده باشد، این پارامتر لغو تنظیم میشود. هنگامی که این مقدار در داخل یک تابع ویجت تنظیم شود، ویجتهای توکار فراخوانیشده با دستور توکار zle از مقدار اختصاصیافته استفاده خواهند کرد. اگر در داخل تابع ویجت لغو تنظیم شود، ویجتهای توکار فراخوانیشده طوری عمل میکنند که گویی هیچ آرگومان عددی داده نشده است.
- PENDING (عدد صحیح)
- تعداد بایتهای در انتظار ورودی، یعنی تعداد بایتهایی که قبلاً تایپ شدهاند و میتوان آنها را بلافاصله خواند. در سیستمهایی که شل قادر به دریافت این اطلاعات نیست، این پارامتر همیشه مقدار صفر خواهد داشت. فقطخواندنی. همچنین به KEYS_QUEUED_COUNT مراجعه کنید؛ این دو مقدار متمایز هستند.
- PREBUFFER (اسکالر)
- در ورودیهای چندخطی در پرامپت ثانویه، این پارامتر فقطخواندنی حاوی محتویات خطوط قبل از خطی است که مکاننما در حال حاضر در آن قرار دارد.
- PREDISPLAY (اسکالر)
- متنی که قرار است قبل از شروع بافر متن قابل ویرایش نمایش داده شود. این متن نیازی نیست یک خط کامل باشد؛ برای نمایش یک خط کامل، باید یک خط جدید (newline) صریحاً به انتهای آن افزوده شود. این متن در هر فراخوانی جدید (اما نه فراخوانی بازگشتی) zle بازنشانی میشود.
- POSTDISPLAY (اسکالر)
- متنی که قرار است پس از پایان بافر متن قابل ویرایش نمایش داده شود. این متن نیازی نیست یک خط کامل باشد؛ برای نمایش یک خط کامل، باید یک خط جدید صریحاً به ابتدای آن افزوده شود. این متن در هر فراخوانی جدید (اما نه فراخوانی بازگشتی) zle بازنشانی میشود.
- RBUFFER (اسکالر)
- بخشی از بافر که در سمت راست موقعیت مکاننما قرار دارد. اگر مقداری به آن اختصاص داده شود، فقط آن بخش از بافر جایگزین میشود و مکاننما میان $LBUFFER قدیمی و $RBUFFER جدید باقی میماند.
- REGION_ACTIVE (عدد صحیح)
- نشان میدهد که آیا ناحیه (region) در حال حاضر فعال است یا خیر. میتوان برای غیرفعالسازی و فعالسازی ناحیه به ترتیب مقادیر 0 یا 1 را به آن اختصاص داد. مقدار 2 ناحیه را در حالت سطری (line-wise) فعال میکند که در آن متن برجستهشده فقط در کل خطوط امتداد مییابد؛ به بخش برجستهسازی نویسهها (Character Highlighting) در ادامه مراجعه کنید.
- region_highlight (آرایه)
- هر عنصر از این آرایه ممکن است روی رشتهای تنظیم شود که برجستهسازی برای یک ناحیه اختیاری از خط فرمان را توصیف میکند که دفعه بعد با بازنمایش خط فرمان اعمال خواهد شد. برجستهسازی بخشهای غیرقابل ویرایش خط فرمان در PREDISPLAY و POSTDISPLAY امکانپذیر است، اما توجه داشته باشید که فلگ P برای نمایهسازی نویسهها به منظور دربرگرفتن PREDISPLAY مورد نیاز است.
هر رشته شامل بخشهای جداشده با فاصله زیر است:
- •
- به صورت اختیاری، یک `P' برای نشان دادن اینکه آفست شروع و پایان بعدی شامل هر رشتهای است که توسط پارامتر ویژه PREDISPLAY تنظیم شده است؛ این گزینه زمانی مورد نیاز است که خود رشته predisplay قرار است برجسته شود. فاصله میان `P' و آفست شروع اختیاری است.
- •
- یک آفست شروع در همان واحدهای CURSOR.
- •
- یک آفست پایان در همان واحدهای CURSOR.
- •
- یک مشخصه برجستهسازی در همان قالبی که برای زمینهها در پارامتر zle_highlight استفاده میشود، به بخش `برجستهسازی نویسهها (Character Highlighting)' در ادامه مراجعه کنید؛ برای مثال، standout یا fg=red,bold.
- •
- به صورت اختیاری، رشتهای به شکل `memo=token'. متغیر token شامل همه چیز میان `=' و فاصله بعدی، کاما، NUL یا انتهای رشته است. token دقیقاً حفظ میشود اما به هیچ وجه تجزیه نمیشود.
پلاگینها میتوانند از این گزینه برای شناسایی عناصر آرایهای که اضافه کردهاند استفاده کنند: برای مثال، یک پلاگین ممکن است token را روی نام خود تنظیم کرده و سپس از `region_highlight=( ${region_highlight:#*memo=token} )' برای حذف عناصر آرایهای که اضافه کرده است استفاده کند.
(این مثال از نحو تطبیق آرایه `${name:#pattern}' شرح داده شده در بخش `گسترش پارامتر (Parameter Expansion)' در zshexpn(1) استفاده میکند.)
برای مثال،
region_highlight=("P0 20 bold memo=foobar")
مشخص میکند که بیست نویسه اول متن از جمله هر رشته predisplay باید به صورت بولد (bold) برجسته شوند.
توجه داشته باشید که اثر region_highlight ذخیره نمیشود و به محض تایید خط ناپدید میشود.
توجه داشته باشید که zsh نسخه 5.8 و نسخههای قدیمیتر از فیلد `memo=token' پشتیبانی نمیکنند و در صورت ارائه memo ممکن است فیلد سوم (مشخصه برجستهسازی) را به اشتباه تجزیه کنند.
برجستهسازی نهایی روی خط فرمان به هر دو پارامتر region_highlight و zle_highlight بستگی دارد؛ برای جزئیات به بخش برجستهسازی نویسهها (CHARACTER HIGHLIGHTING) در ادامه مراجعه کنید.
- registers (آرایه انجمنی)
- محتویات هر یک از بافرهای ثبات (register) در vi. این مقادیر معمولاً با استفاده از vi-set-buffer و به دنبال آن یک دستور حذف، تغییر یا یانک تنظیم میشوند.
- SUFFIX_ACTIVE (عدد صحیح)
- SUFFIX_START (عدد صحیح)
- SUFFIX_END (عدد صحیح)
- پارامتر SUFFIX_ACTIVE نشان میدهد که آیا پسوند تکمیل خودکار قابل حذف خودکار در حال حاضر فعال است یا خیر. SUFFIX_START و SUFFIX_END موقعیت پسوند را مشخص میکنند و واحدهای یکسانی با CURSOR دارند. آنها تنها زمانی برای خواندن معتبر هستند که SUFFIX_ACTIVE غیرصفر باشد.
تمام این پارامترها فقطخواندنی هستند.
- UNDO_CHANGE_NO (عدد صحیح)
- عددی که وضعیت تاریخچه واگرد (undo) را نشان میدهد. تنها کاربرد این متغیر ارسال آن به عنوان آرگومان به ویجت undo برای واگرد به نقطه ثبتشده است. فقطخواندنی.
- UNDO_LIMIT_NO (عدد صحیح)
- عددی متناظر با یک تغییر موجود در تاریخچه واگرد؛ با UNDO_CHANGE_NO مقایسه کنید. اگر این متغیر روی مقداری بزرگتر از صفر تنظیم شود، دستور undo اجازه واگرد خط فراتر از شماره تغییر دادهشده را نخواهد داد. همچنان امکان استفاده از `zle undo change' در یک ویجت برای واگرد به فراتر از آن نقطه وجود دارد؛ در این حالت، تا زمانی که UNDO_LIMIT_NO کاهش نیابد امکان هیچ واگردی وجود نخواهد داشت. برای غیرفعال کردن محدودیت، مقدار را روی 0 قرار دهید.
یک کاربرد معمول از این متغیر در یک تابع ویجت به صورت زیر است (توجه داشته باشید که حوزه تابع اضافی مورد نیاز است):
() {
local UNDO_LIMIT_NO=$UNDO_CHANGE_NO
# انجام نوعی از ویرایش بازگشتی.
}
- WIDGET (اسکالر)
- نام ویجتی که در حال حاضر در حال اجرا است؛ فقطخواندنی.
- WIDGETFUNC (اسکالر)
- نام تابع شل که پیادهسازیکننده ویجتی است که با zle -N یا zle -C تعریف شده است. در حالت اول، این آرگومان دوم دستور zle -N است که ویجت را تعریف کرده، یا آرگومان اول در صورتی که آرگومان دومی وجود نداشته باشد. در حالت دوم این مقدار آرگومان سوم دستور zle -C است که ویجت را تعریف کرده است. فقطخواندنی.
- WIDGETSTYLE (اسکالر)
- پیادهسازی پشت ویجت تکمیل خودکار در حال اجرا را توصیف میکند؛ آرگومان دومی که پس از zle -C هنگام تعریف ویجت آمده بود. این نام یک ویجت تکمیل توکار است. برای ویجتهای تعریفشده با zle -N این متغیر روی رشته خالی تنظیم میشود. فقطخواندنی.
- YANK_ACTIVE (عدد صحیح)
- YANK_START (عدد صحیح)
- YANK_END (عدد صحیح)
- پارامتر YANK_ACTIVE نشان میدهد که آیا متنی به تازگی در بافر بازگردانی (یانک/پیست) شده است یا خیر. YANK_START و YANK_END موقعیت متن پیستشده را مشخص میکنند و واحدهای یکسانی با CURSOR دارند. آنها تنها زمانی برای خواندن معتبر هستند که YANK_ACTIVE غیرصفر باشد. همچنین میتوان آنها را توسط ویجتهایی که متن را به شیوه مشابه یانک درج میکنند، برای مثال پوششهای bracketed-paste، مقداردهی کرد. همچنین به zle -f مراجعه کنید.
پارامتر YANK_ACTIVE فقطخواندنی است.
- ZLE_RECURSIVE (عدد صحیح)
- معمولاً صفر است، اما در داخل هر نمونهای از recursive-edit افزایش مییابد. بنابراین سطح بازگشت فعلی را نشان میدهد.
پارامتر ZLE_RECURSIVE فقطخواندنی است.
- ZLE_STATE (اسکالر)
- شامل مجموعهای از کلمات جداشده با فاصله است که وضعیت فعلی zle را توصیف میکنند.
در حال حاضر، وضعیتهای نمایشدادهشده عبارتند از حالت درج طبق تنظیم ویجتهای overwrite-mode یا vi-replace و اینکه آیا دستورات تاریخچه ورودیهای واردشده را بررسی خواهند کرد یا خیر، که توسط ویجت set-local-history کنترل میشود. اگر نویسههایی که قرار است در خط فرمان درج شوند نویسههای موجود را به سمت راست حرکت دهند، رشته حاوی `insert' خواهد بود و اگر نویسههای جدید روی نویسههای قبلی رونویسی شوند حاوی `overwrite' است. اگر تنها دستورات تاریخچه محلی بررسی شوند حاوی `localhistory' و اگر دستورات تاریخچه واردشده نیز بررسی شوند حاوی `globalhistory' خواهد بود.
زیررشتهها به ترتیب الفبایی مرتب شدهاند تا اگر بخواهید دو زیررشته خاص را به شیوهای سازگار با آینده مطابقت دهید، بتوانید به صورت زیر عمل کنید:
if [[ $ZLE_STATE == *globalhistory*insert* ]]; then ...; fi
ویجتهای ویژه (Special Widgets)
چند ویجت تعریفشده توسط کاربر وجود دارند که برای شل ویژه هستند. اگر وجود نداشته باشند، هیچ اقدام خاصی انجام نمیشود. محیط ارائهشده دقیقاً مانند محیط هر ویجت ویرایشی دیگری است.
- zle-isearch-exit
- در پایان جستجوی افزایشی در نقطهای که پرامپت isearch از صفحه نمایش حذف میشود اجرا میشود. برای یک مثال به zle-isearch-update مراجعه کنید.
- zle-isearch-update
- در طول جستجوی افزایشی هنگامی که نمایش در آستانه ترسیم مجدد است اجرا میشود. خروجی اضافی در زیر پرامپت جستجوی افزایشی را میتوان با استفاده از `zle -M' درون ویجت تولید کرد. برای مثال،
zle-isearch-update() { zle -M "Line $HISTNO"; }
zle -N zle-isearch-update
توجه داشته باشید که خط خروجی دادهشده توسط `zle -M' هنگام خروج از جستجوی افزایشی حذف نمیشود. این کار را میتوان از طریق یک ویجت zle-isearch-exit انجام داد:
zle-isearch-exit() { zle -M ""; }
zle -N zle-isearch-exit
- zle-line-pre-redraw
- هر زمان که خط ورودی در آستانه ترسیم مجدد باشد اجرا میشود، و فرصتی برای بهروزرسانی آرایه region_highlight فراهم میکند.
- zle-line-init
- هر بار که ویرایشگر خط برای خواندن یک خط ورودی جدید راهاندازی میشود اجرا میگردد. مثال زیر ویرایشگر خط را هنگام راهاندازی در حالت فرمان vi قرار میدهد.
zle-line-init() { zle -K vicmd; }
zle -N zle-line-init
(دستور درون تابع نقشهکلید را مستقیماً تنظیم میکند؛ این معادل با zle vi-cmd-mode است.)
- zle-line-finish
- این ویجت مشابه zle-line-init است اما هر بار که ویرایشگر خط خواندن یک خط ورودی را به پایان میرساند اجرا میشود.
- zle-history-line-set
- هنگامی که خط تاریخچه تغییر میکند اجرا میشود.
- zle-keymap-select
- هر بار که نقشهکلید تغییر میکند، یعنی پارامتر ویژه KEYMAP روی مقدار متفاوتی در زمان فعال بودن ویرایشگر خط تنظیم میشود، اجرا میگردد. مقداردهی اولیه نقشهکلید هنگام راهاندازی ویرایشگر خط باعث فراخوانی این ویجت نمیشود.
مقدار $KEYMAP در داخل تابع نقشهکلید جدید را منعکس میکند. نقشهکلید قدیمی به عنوان تنها آرگومان ارسال میشود.
از این ویجت میتوان برای تشخیص تعویض میان نقشهکلیدهای فرمان vi (vicmd) و درج (معمولاً main) استفاده کرد.
ویجتهای استاندارد (STANDARD WIDGETS)
در ادامه فهرستی از تمام ویجتهای استاندارد، و نگاشتهای پیشفرض آنها در حالت emacs، حالت فرمان vi و حالت درج vi (به ترتیب نقشهکلیدهای `emacs'، `vicmd' و `viins') آورده شده است.
توجه داشته باشید که کلیدهای مکاننما در هر سه نقشهکلید به کلیدهای حرکتی نگاشت شدهاند؛ شل فرض میکند که کلیدهای مکاننما همان توالیهای کلیدی گزارششده توسط کتابخانه مدیریت ترمینال (termcap یا terminfo) را ارسال میکنند. توالیهای کلید نشان داده شده در این فهرست بر اساس VT100 هستند که در بسیاری از ترمینالهای مدرن رایج است، اما در واقع لزوماً نگاشت نشدهاند. در مورد نقشهکلید viins، نویسه فرار (escape) اولیه این توالیها همچنین برای بازگشت به نقشهکلید vicmd عمل میکند: اینکه آیا این اتفاق میافتد یا خیر توسط پارامتر KEYTIMEOUT تعیین میشود؛ به zshparam(1) مراجعه کنید.
حرکت و جابهجایی (Movement)
- vi-backward-blank-word (نگاشتنشده) (B) (نگاشتنشده)
- یک کلمه به عقب حرکت میکند، که در آن یک کلمه به عنوان مجموعهای از نویسههای غیرفاصله تعریف میشود.
- vi-backward-blank-word-end (نگاشتنشده) (gE) (نگاشتنشده)
- به انتهای کلمه قبلی حرکت میکند، که در آن کلمه به عنوان مجموعهای از نویسههای غیرفاصله تعریف میشود.
- backward-char (^B ESC-[D) (نگاشتنشده) (نگاشتنشده)
- یک نویسه به عقب حرکت میکند.
- vi-backward-char (نگاشتنشده) (^H h ^?) (ESC-[D)
- یک نویسه به عقب حرکت میکند، بدون تغییر خطوط.
- backward-word (ESC-B ESC-b) (نگاشتنشده) (نگاشتنشده)
- به ابتدای کلمه قبلی حرکت میکند.
- emacs-backward-word
- به ابتدای کلمه قبلی حرکت میکند.
- vi-backward-word (نگاشتنشده) (b) (نگاشتنشده)
- به ابتدای کلمه قبلی به سبک vi حرکت میکند.
- vi-backward-word-end (نگاشتنشده) (ge) (نگاشتنشده)
- به انتهای کلمه قبلی به سبک vi حرکت میکند.
- beginning-of-line (^A) (نگاشتنشده) (نگاشتنشده)
- به ابتدای خط حرکت میکند. اگر از قبل در ابتدای خط باشد، به ابتدای خط قبلی (در صورت وجود) حرکت میکند.
- vi-beginning-of-line
- به ابتدای خط حرکت میکند، بدون تغییر خطوط.
- down-line (نگاشتنشده) (نگاشتنشده) (نگاشتنشده)
- یک خط به پایین در بافر حرکت میکند.
- end-of-line (^E) (نگاشتنشده) (نگاشتنشده)
- به انتهای خط حرکت میکند. اگر از قبل در انتهای خط باشد، به انتهای خط بعدی (در صورت وجود) حرکت میکند.
- vi-end-of-line (نگاشتنشده) ($) (نگاشتنشده)
- به انتهای خط حرکت میکند. اگر آرگومانی به این دستور داده شود، مکاننما به اندازه (آرگومان - 1) خط به پایین به انتهای خط منتقل خواهد شد.
- vi-forward-blank-word (نگاشتنشده) (W) (نگاشتنشده)
- یک کلمه به جلو حرکت میکند، که در آن یک کلمه به عنوان مجموعهای از نویسههای غیرفاصله تعریف میشود.
- vi-forward-blank-word-end (نگاشتنشده) (E) (نگاشتنشده)
- به انتهای کلمه جاری، یا اگر در انتهای کلمه جاری باشد به انتهای کلمه بعدی حرکت میکند، که در آن یک کلمه به عنوان مجموعهای از نویسههای غیرفاصله تعریف میشود.
- forward-char (^F ESC-[C) (نگاشتنشده) (نگاشتنشده)
- یک نویسه به جلو حرکت میکند.
- vi-forward-char (نگاشتنشده) (space l) (ESC-[C)
- یک نویسه به جلو حرکت میکند.
- vi-find-next-char (^X^F) (f) (نگاشتنشده)
- یک نویسه را از صفحهکلید میخواند و به وقوع بعدی آن در خط حرکت میکند.
- vi-find-next-char-skip (نگاشتنشده) (t) (نگاشتنشده)
- یک نویسه را از صفحهکلید میخواند و به موقعیت دقیقاً قبل از وقوع بعدی آن در خط حرکت میکند.
- vi-find-prev-char (نگاشتنشده) (F) (نگاشتنشده)
- یک نویسه را از صفحهکلید میخواند و به وقوع قبلی آن در خط حرکت میکند.
- vi-find-prev-char-skip (نگاشتنشده) (T) (نگاشتنشده)
- یک نویسه را از صفحهکلید میخواند و به موقعیت دقیقاً بعد از وقوع قبلی آن در خط حرکت میکند.
- vi-first-non-blank (نگاشتنشده) (^) (نگاشتنشده)
- به اولین نویسه غیرفاصله در خط حرکت میکند.
- vi-forward-word (نگاشتنشده) (w) (نگاشتنشده)
- یک کلمه به جلو به سبک vi حرکت میکند.
- forward-word (ESC-F ESC-f) (نگاشتنشده) (نگاشتنشده)
- به ابتدای کلمه بعدی حرکت میکند. تعریف ویرایشگر از کلمه با پارامتر WORDCHARS مشخص میشود.
- emacs-forward-word
- به انتهای کلمه بعدی حرکت میکند.
- vi-forward-word-end (نگاشتنشده) (e) (نگاشتنشده)
- به انتهای کلمه بعدی حرکت میکند.
- vi-goto-column (ESC-|) (|) (نگاشتنشده)
- به ستون مشخصشده توسط آرگومان عددی حرکت میکند.
- vi-goto-mark (نگاشتنشده) (`) (نگاشتنشده)
- به نشانگر (mark) مشخصشده حرکت میکند.
- vi-goto-mark-line (نگاشتنشده) (') (نگاشتنشده)
- به ابتدای خط حاوی نشانگر مشخصشده حرکت میکند.
- vi-repeat-find (نگاشتنشده) (;) (نگاشتنشده)
- آخرین دستور vi-find را تکرار میکند.
- vi-rev-repeat-find (نگاشتنشده) (,) (نگاشتنشده)
- آخرین دستور vi-find را در جهت معکوس تکرار میکند.
- up-line (نگاشتنشده) (نگاشتنشده) (نگاشتنشده)
- یک خط به بالا در بافر حرکت میکند.
کنترل تاریخچه (History Control)
- beginning-of-buffer-or-history (ESC-<) (gg) (نگاشتنشده)
- به ابتدای بافر، یا اگر از قبل در آنجا باشد، به اولین رویداد در لیست تاریخچه حرکت میکند.
- beginning-of-line-hist
- به ابتدای خط حرکت میکند. اگر از قبل در ابتدای بافر باشد، به خط تاریخچه قبلی حرکت میکند.
- beginning-of-history
- به اولین رویداد در لیست تاریخچه حرکت میکند.
- down-line-or-history (^N ESC-[B) (j) (ESC-[B)
- یک خط در بافر به پایین حرکت میکند، یا اگر در پایینترین خط باشد، به رویداد بعدی در لیست تاریخچه حرکت میکند.
- vi-down-line-or-history (نگاشتنشده) (+) (نگاشتنشده)
- یک خط در بافر به پایین حرکت میکند، یا اگر در پایینترین خط باشد، به رویداد بعدی در لیست تاریخچه حرکت میکند. سپس به اولین نویسه غیرفاصله در خط میرود.
- down-line-or-search
- یک خط در بافر به پایین حرکت میکند، یا اگر در پایینترین خط باشد، در تاریخچه به سمت جلو برای خطی که با کلمه اول در بافر شروع میشود جستجو میکند.
اگر از یک تابع توسط دستور zle همراه با آرگومانها فراخوانی شود، آرگومان اول به جای کلمه اول در بافر به عنوان رشته مورد جستجو در نظر گرفته میشود.
- down-history (نگاشتنشده) (^N) (نگاشتنشده)
- به رویداد بعدی در لیست تاریخچه حرکت میکند.
- history-beginning-search-backward
- در تاریخچه به سمت عقب برای خطی که با خط جاری تا مکاننما شروع میشود جستجو میکند. این کار مکاننما را در موقعیت اصلی خود باقی میگذارد.
- end-of-buffer-or-history (ESC->) (نگاشتنشده) (نگاشتنشده)
- به انتهای بافر حرکت میکند، یا اگر از قبل در آنجا باشد، به آخرین رویداد در لیست تاریخچه حرکت میکند.
- end-of-line-hist
- به انتهای خط حرکت میکند. اگر از قبل در انتهای بافر باشد، به خط تاریخچه بعدی حرکت میکند.
- end-of-history
- به آخرین رویداد در لیست تاریخچه حرکت میکند.
- vi-fetch-history (نگاشتنشده) (G) (نگاشتنشده)
- خط تاریخچه مشخصشده توسط آرگومان عددی را واکشی میکند. این مقدار به طور پیشفرض خط تاریخچه جاری است (یعنی همان خطی که هنوز ثبت تاریخچه نشده است).
- history-incremental-search-backward (^R ^Xr) (نگاشتنشده) (نگاشتنشده)
- به صورت افزایشی به سمت عقب برای یک رشته مشخص جستجو میکند. این جستجو در صورتی که رشته جستجو حروف بزرگ نداشته باشد و هیچ آرگومان عددی داده نشده باشد، به حروف بزرگ و کوچک حساس نیست. رشته میتواند با `^' شروع شود تا جستجو به ابتدای خط مهار (anchor) شود. هنگامی که از یک تابع تعریفشده توسط کاربر فراخوانی میشود وضعیتهای زیر را برمیگرداند: 0 اگر جستجو موفقیتآمیز باشد؛ 1 اگر جستجو شکست بخورد؛ 2 اگر عبارت جستجو الگوی نادرستی باشد؛ 3 اگر جستجو توسط دستور send-break لغو شود.
مجموعه محدودی از توابع ویرایشی در مینیبافر (mini-buffer) در دسترس است. کلیدها در نقشهکلید ویژه isearch جستجو میشوند، و اگر در آنجا یافت نشوند در نقشهکلید اصلی بررسی میشوند (توجه داشته باشید که به طور پیشفرض نقشهکلید isearch خالی است). سیگنال وقفه (interrupt)، همانطور که توسط تنظیمات stty تعریف شده است، جستجو را متوقف کرده و به خط اصلی بازمیگردد. یک کلید تعریفنشده اثر یکسانی خواهد داشت. توجه داشته باشید که موارد زیر همیشه همان کار را در جستجوهای افزایشی انجام میدهند و نمیتوان آنها را با ویجتهای تعریفشده توسط کاربر جایگزین کرد، و مجموعه توابع نیز قابل گسترش نیست. توابع پشتیبانیشده عبارتند از:
- accept-and-hold
- accept-and-infer-next-history
- accept-line
- accept-line-and-down-history
- پس از خروج از جستجوی افزایشی، تابع معمول را انجام میدهند. خط فرمان نمایشدادهشده اجرا میشود.
- backward-delete-char
- vi-backward-delete-char
- یک گام در تاریخچه جستجو به عقب برمیگردد. اگر جستجو تکرار شده باشد، این کار بلافاصله نویسهای را در مینیبافر پاک نمیکند.
- accept-search
- از جستجوی افزایشی خارج میشود، خط فرمان را حفظ میکند اما هیچ اقدام دیگری انجام نمیدهد. توجه داشته باشید که این تابع به طور پیشفرض نگاشت نشده است و در خارج از جستجوی افزایشی هیچ اثری ندارد.
- backward-delete-word
- backward-kill-word
- vi-backward-kill-word
- یک نویسه در مینیبافر به عقب برمیگردد؛ اگر از زمان درج نویسه چندین جستجو انجام شده باشد، تاریخچه جستجو به نقطهای دقیقاً قبل از وارد کردن نویسه بازگردانده میشود. بنابراین این دستور همان اثر تکرار backward-delete-char را دارد.
- clear-screen
- صفحه را پاک میکند، در حالی که در حالت جستجوی افزایشی باقی میماند.
- history-incremental-search-backward
- وقوع بعدی محتویات مینیبافر را مییابد. اگر مینیبافر خالی باشد، آخرین رشته جستجوی قبلاً استفادهشده بازیابی میشود.
- history-incremental-search-forward
- جهت جستجو را معکوس میکند.
- magic-space
- یک فاصله غیرجادویی (non-magical space) درج میکند.
- quoted-insert
- vi-quoted-insert
- نویسه را برای درج در مینیبافر نقلقول (quote/escape) میکند.
- redisplay
- خط فرمان را مجدداً نمایش میدهد، در حالی که در حالت جستجوی افزایشی باقی میماند.
- vi-cmd-mode
- نقشهکلید `vicmd' را انتخاب میکند؛ نقشهکلید `main' (حالت درج) در ابتدا انتخاب خواهد شد.
علاوه بر این، تغییراتی که در حالت درج vi ایجاد شده بودند ادغام میشوند تا یک رویداد واگرد واحد را تشکیل دهند.
- vi-repeat-search
- vi-rev-repeat-search
- جستجو را تکرار میکند. جهت جستجو در مینیبافر نشان داده میشود.
هر نویسهای که به یکی از توابع بالا، یا self-insert یا self-insert-unmeta نگاشت نشده باشد، باعث خروج از این حالت میشود. سپس نویسه در نقشهکلید جاری در آن نقطه جستجو و اجرا میشود.
هنگامی که از یک تابع ویجت توسط دستور zle فراخوانی شوند، دستورات جستجوی افزایشی میتوانند یک آرگومان رشتهای بگیرند. با این رشته مانند رشتهای از کلیدها، مشابه آرگومانهای دستور bindkey رفتار میشود و به عنوان ورودی اولیه برای دستور استفاده خواهد شد. هر نویسهای در رشته که توسط جستجوی افزایشی استفاده نشود، نادیده گرفته خواهد شد. برای مثال،
zle history-incremental-search-backward forceps
به سمت عقب برای forceps جستجو میکند و مینیبافر حاوی رشته `forceps' باقی خواهد ماند.
- history-incremental-search-forward (^S ^Xs) (نگاشتنشده) (نگاشتنشده)
- به صورت افزایشی به سمت جلو برای یک رشته مشخص جستجو میکند. این جستجو در صورتی که رشته جستجو حروف بزرگ نداشته باشد و هیچ آرگومان عددی داده نشده باشد، به حروف بزرگ و کوچک حساس نیست. رشته میتواند با `^' شروع شود تا جستجو به ابتدای خط مهار شود. توابع موجود در مینیبافر همانند history-incremental-search-backward هستند.
- history-incremental-pattern-search-backward
- history-incremental-pattern-search-forward
- این ویجتها رفتاری مشابه با ویجتهای متناظر بدون -pattern دارند، اما رشته جستجوی تایپشده توسط کاربر به عنوان یک الگو در نظر گرفته میشود، با رعایت تنظیمات فعلی گزینههای مختلف مؤثر بر تطبیق الگو. برای شرح الگوها به FILENAME GENERATION در zshexpn(1) مراجعه کنید. اگر هیچ آرگومان عددی داده نشده باشد، حروف کوچک در رشته جستجو ممکن است با حروف بزرگ در تاریخچه مطابقت داشته باشند. رشته میتواند با `^' شروع شود تا جستجو به ابتدای خط مهار شود.
پرامپت برای نشان دادن الگوی نامعتبر تغییر میکند؛ این ممکن است صرفاً نشاندهنده کامل نبودن الگو باشد.
توجه داشته باشید که تنها تطابقهای غیرهمپوشان گزارش میشوند، بنابراین عبارتی با نویسههای عام (wildcards) ممکن است تطابقهای کمتری روی یک خط نسبت به آنچه با بازبینی چشمی دیده میشود بازگرداند.
- history-search-backward (ESC-P ESC-p) (نگاشتنشده) (نگاشتنشده)
- در تاریخچه به سمت عقب برای خطی که با کلمه اول در بافر شروع میشود جستجو میکند.
اگر از یک تابع توسط دستور zle همراه با آرگومانها فراخوانی شود، آرگومان اول به جای کلمه اول در بافر به عنوان رشته مورد جستجو در نظر گرفته میشود.
- vi-history-search-backward (نگاشتنشده) (/) (نگاشتنشده)
- در تاریخچه به سمت عقب برای یک رشته مشخص جستجو میکند. رشته میتواند با `^' شروع شود تا جستجو به ابتدای خط مهار شود.
مجموعه محدودی از توابع ویرایشی در مینیبافر در دسترس است. سیگنال وقفه، همانطور که توسط تنظیمات stty تعریف شده است، جستجو را متوقف میکند. توابع موجود در مینیبافر عبارتند از: accept-line، backward-delete-char، vi-backward-delete-char، backward-kill-word، vi-backward-kill-word، clear-screen، redisplay، quoted-insert و vi-quoted-insert.
دستور vi-cmd-mode مانند accept-line در نظر گرفته میشود و magic-space مانند فاصله عمل میکند. هر نویسه دیگری که به self-insert یا self-insert-unmeta نگاشت نشده باشد بوق زده و نادیده گرفته میشود. اگر تابع از حالت فرمان vi فراخوانی شود، از نگاشتهای حالت درج فعلی استفاده خواهد شد.
اگر از یک تابع توسط دستور zle همراه با آرگومانها فراخوانی شود، آرگومان اول به جای کلمه اول در بافر به عنوان رشته مورد جستجو در نظر گرفته میشود.
- history-search-forward (ESC-N ESC-n) (نگاشتنشده) (نگاشتنشده)
- در تاریخچه به سمت جلو برای خطی که با کلمه اول در بافر شروع میشود جستجو میکند.
اگر از یک تابع توسط دستور zle همراه با آرگومانها فراخوانی شود، آرگومان اول به جای کلمه اول در بافر به عنوان رشته مورد جستجو در نظر گرفته میشود.
- vi-history-search-forward (نگاشتنشده) (?) (نگاشتنشده)
- در تاریخچه به سمت جلو برای یک رشته مشخص جستجو میکند. رشته میتواند با `^' شروع شود تا جستجو به ابتدای خط مهار شود. توابع موجود در مینیبافر همانند vi-history-search-backward هستند. مدیریت آرگومانها نیز همانند آن دستور است.
- infer-next-history (^X^N) (نگاشتنشده) (نگاشتنشده)
- در لیست تاریخچه برای خطی مطابق با خط فعلی جستجو کرده و رویداد پس از آن را واکشی میکند.
- insert-last-word (ESC-_ ESC-.) (نگاشتنشده) (نگاشتنشده)
- آخرین کلمه از رویداد تاریخچه قبلی را در موقعیت مکاننما درج میکند. اگر یک آرگومان عددی مثبت داده شود، آن کلمه را از انتهای رویداد تاریخچه قبلی درج میکند. اگر آرگومان صفر یا منفی باشد، آن کلمه را از سمت چپ درج میکند (صفر کلمه دستور قبلی را درج میکند). تکرار این دستور، کلمه به تازگی درجشده را با آخرین کلمه از رویداد تاریخچه قبل از رویداد استفادهشده جایگزین میکند؛ میتوان از آرگومانهای عددی به همان شیوه برای انتخاب کلمهای از آن رویداد استفاده کرد.
هنگامی که از یک تابع شل فراخوانیشده از یک ویجت تعریفشده توسط کاربر فراخوانی شود، دستور میتواند یک تا سه آرگومان بگیرد. آرگومان اول یک آفست تاریخچه را مشخص میکند که روی فراخوانیهای متوالی این ویجت اعمال میشود: اگر -1 باشد، رفتار پیشفرض استفاده میشود، در حالی که اگر 1 باشد فراخوانیهای متوالی در تاریخچه به سمت جلو حرکت میکنند. مقدار 0 را میتوان برای نشان دادن اینکه خط تاریخچه بررسیشده توسط اجرای قبلی دستور مجدداً بررسی خواهد شد استفاده کرد. توجه داشته باشید که اعداد منفی باید با آرگومان `--' شروع شوند تا با گزینهها اشتباه گرفته نشوند.
اگر دو آرگومان داده شود، دومی کلمه روی خط فرمان را در نماد شاخص آرایه عادی مشخص میکند (به عنوان جایگزین طبیعیتر برای آرگومان عددی). بنابراین 1 کلمه اول و -1 (پیشفرض) آخرین کلمه است.
اگر آرگومان سومی داده شود، مقدار آن نادیده گرفته میشود، اما برای نشان دادن اینکه آفست تاریخچه نسبت به خط تاریخچه فعلی است، و نه خط بهخاطرسپردهشده پس از فراخوانیهای قبلی insert-last-word، استفاده میشود.
برای مثال، رفتار پیشفرض دستور متناظر با موارد زیر است:
zle insert-last-word -- -1 -1
در حالی که دستور
zle insert-last-word -- -1 1 -
همیشه اولین کلمه از خط موجود در تاریخچه بلافاصله قبل از خط در حال ویرایش را کپی میکند. این کار اثر جانبی دارد که فراخوانیهای بعدی ویجت نسبت به آن خط خواهد بود.
- vi-repeat-search (نگاشتنشده) (n) (نگاشتنشده)
- آخرین جستجوی تاریخچه vi را تکرار میکند.
- vi-rev-repeat-search (نگاشتنشده) (N) (نگاشتنشده)
- آخرین جستجوی تاریخچه vi را در جهت معکوس تکرار میکند.
- up-line-or-history (^P ESC-[A) (k) (ESC-[A)
- یک خط در بافر به بالا حرکت میکند، یا اگر از قبل در بالاترین خط باشد، به رویداد قبلی در لیست تاریخچه حرکت میکند.
- vi-up-line-or-history (نگاشتنشده) (-) (نگاشتنشده)
- یک خط در بافر به بالا حرکت میکند، یا اگر از قبل در بالاترین خط باشد، به رویداد قبلی در لیست تاریخچه حرکت میکند. سپس به اولین نویسه غیرفاصله در خط میرود.
- up-line-or-search
- یک خط در بافر به بالا حرکت میکند، یا اگر از قبل در بالاترین خط باشد، در تاریخچه به سمت عقب برای خطی که با کلمه اول در بافر شروع میشود جستجو میکند.
اگر از یک تابع توسط دستور zle همراه با آرگومانها فراخوانی شود، آرگومان اول به جای کلمه اول در بافر به عنوان رشته مورد جستجو در نظر گرفته میشود.
- up-history (نگاشتنشده) (^P) (نگاشتنشده)
- به رویداد قبلی در لیست تاریخچه حرکت میکند.
- history-beginning-search-forward
- در تاریخچه به سمت جلو برای خطی که با خط جاری تا مکاننما شروع میشود جستجو میکند. این کار مکاننما را در موقعیت اصلی خود باقی میگذارد.
- set-local-history
- به طور پیشفرض، دستورات حرکت در تاریخچه خطوط واردشده و همچنین خطوط محلی را بررسی میکنند. این ویجت به شما امکان میدهد این ویژگی را روشن و خاموش کنید، یا آن را با آرگومان عددی تنظیم کنید. مقدار صفر برای هر دو خطوط محلی و واردشده و غیرصفر تنها برای خطوط محلی است.
ویرایش متن (Modifying Text)
- vi-add-eol (نگاشتنشده) (A) (نگاشتنشده)
- به انتهای خط حرکت کرده و وارد حالت درج میشود.
- vi-add-next (نگاشتنشده) (a) (نگاشتنشده)
- وارد حالت درج بعد از موقعیت فعلی مکاننما میشود، بدون تغییر خطوط.
- backward-delete-char (^H ^?) (نگاشتنشده) (نگاشتنشده)
- نویسه پشت مکاننما را حذف میکند.
- vi-backward-delete-char (نگاشتنشده) (X) (^H)
- نویسه پشت مکاننما را بدون تغییر خطوط حذف میکند. اگر در حالت درج باشد، فراتر از نقطهای که حالت درج آخرین بار وارد شده بود حذف نخواهد کرد.
- backward-delete-word
- کلمه پشت مکاننما را حذف میکند.
- backward-kill-line
- از ابتدای خط تا موقعیت مکاننما را حذف (kill) میکند.
- backward-kill-word (^W ESC-^H ESC-^?) (نگاشتنشده) (نگاشتنشده)
- کلمه پشت مکاننما را حذف (kill) میکند.
- vi-backward-kill-word (نگاشتنشده) (نگاشتنشده) (^W)
- کلمه پشت مکاننما را بدون عبور از نقطهای که آخرین بار حالت درج وارد شده بود حذف میکند.
- capitalize-word (ESC-C ESC-c) (نگاشتنشده) (نگاشتنشده)
- حرف اول کلمه جاری را بزرگ کرده و از آن عبور میکند.
- vi-change (نگاشتنشده) (c) (نگاشتنشده)
- یک دستور حرکتی را از صفحهکلید میخواند، و از موقعیت مکاننما تا نقطه پایان حرکت را حذف میکند. سپس وارد حالت درج میشود. اگر دستور vi-change باشد، خط جاری را تغییر میدهد.
برای سازگاری با vi، اگر دستور vi-forward-word یا vi-forward-blank-word باشد، فاصلههای خالی پس از کلمه گنجانده نمیشوند. اگر رفتار سازگارتری را همراه با فاصلههای خالی ترجیح میدهید، از نگاشت کلید زیر استفاده کنید:
bindkey -a -s cw dwi
- vi-change-eol (نگاشتنشده) (C) (نگاشتنشده)
- تا انتهای خط را حذف کرده و وارد حالت درج میشود.
- vi-change-whole-line (نگاشتنشده) (S) (نگاشتنشده)
- کل خط جاری را حذف کرده و وارد حالت درج میشود.
- copy-region-as-kill (ESC-W ESC-w) (نگاشتنشده) (نگاشتنشده)
- ناحیه از مکاننما تا نشانگر را در بافر حذف (kill buffer) کپی میکند.
اگر از یک تابع ویجت ZLE به شکل `zle copy-region-as-kill string' فراخوانی شود، string به عنوان متن برای کپی در بافر حذف در نظر گرفته میشود. در این حالت مکاننما، نشانگر و متن روی خط فرمان استفاده نمیشوند.
- copy-prev-word (ESC-^_) (نگاشتنشده) (نگاشتنشده)
- کلمه سمت چپ مکاننما را تکثیر میکند.
- copy-prev-shell-word
- مشابه copy-prev-word، اما کلمه با استفاده از تجزیه شل پیدا میشود، در حالی که copy-prev-word به دنبال فاصلههای خالی میگردد. این ویژگی زمانی که کلمه نقلقول شده و شامل فاصله باشد تفاوت ایجاد میکند.
- vi-delete (نگاشتنشده) (d) (نگاشتنشده)
- یک دستور حرکتی را از صفحهکلید میخواند، و از موقعیت مکاننما تا نقطه پایان حرکت را حذف میکند. اگر دستور vi-delete باشد، کل خط جاری را حذف میکند.
- delete-char
- نویسه زیر مکاننما را حذف میکند.
- vi-delete-char (نگاشتنشده) (x) (نگاشتنشده)
- نویسه زیر مکاننما را بدون عبور از انتهای خط حذف میکند.
- delete-word
- کلمه جاری را حذف میکند.
- down-case-word (ESC-L ESC-l) (نگاشتنشده) (نگاشتنشده)
- کلمه جاری را به تماماً حروف کوچک تبدیل کرده و از آن عبور میکند.
- vi-down-case (نگاشتنشده) (gu) (نگاشتنشده)
- یک دستور حرکتی را از صفحهکلید میخواند، و تمام نویسهها از موقعیت مکاننما تا نقطه پایان حرکت را به حروف کوچک تبدیل میکند. اگر دستور حرکتی vi-down-case باشد، حالت بزرگی و کوچکی تمام نویسهها در خط جاری را معکوس میکند.
- kill-word (ESC-D ESC-d) (نگاشتنشده) (نگاشتنشده)
- کلمه جاری را حذف (kill) میکند.
- gosmacs-transpose-chars
- دو نویسه پشت مکاننما را با هم جابهجا میکند.
- vi-indent (نگاشتنشده) (>) (نگاشتنشده)
- تعدادی خط را تورفتگی (indent) میدهد.
- vi-insert (نگاشتنشده) (i) (نگاشتنشده)
- وارد حالت درج میشود.
- vi-insert-bol (نگاشتنشده) (I) (نگاشتنشده)
- به اولین نویسه غیرفاصله در خط حرکت کرده و وارد حالت درج میشود.
- vi-join (^X^J) (J) (نگاشتنشده)
- خط جاری را به خط بعدی متصل میکند.
- kill-line (^K) (نگاشتنشده) (نگاشتنشده)
- از مکاننما تا انتهای خط را حذف میکند. اگر از قبل در انتهای خط باشد، نویسه خط جدید (newline) را حذف میکند.
- vi-kill-line (نگاشتنشده) (نگاشتنشده) (^U)
- از مکاننما به سمت عقب تا هر جا که حالت درج آخرین بار وارد شده بود حذف میکند.
- vi-kill-eol (نگاشتنشده) (D) (نگاشتنشده)
- از مکاننما تا انتهای خط را حذف میکند.
- kill-region
- از مکاننما تا نشانگر را حذف میکند.
- kill-buffer (^X^K) (نگاشتنشده) (نگاشتنشده)
- کل بافر را حذف میکند.
- kill-whole-line (^U) (نگاشتنشده) (نگاشتنشده)
- کل خط جاری را حذف میکند.
- vi-match-bracket (^X^B) (%) (نگاشتنشده)
- به نویسه پرانتز یا قلاب (یکی از {}، () یا []) که مطابق با نویسه زیر مکاننما است حرکت میکند. اگر مکاننما روی نویسه قلاب نباشد، به سمت جلو بدون عبور از انتهای خط حرکت میکند تا یکی را پیدا کند، و سپس به قلاب متناظر میرود.
- vi-open-line-above (نگاشتنشده) (O) (نگاشتنشده)
- یک خط در بالای مکاننما باز کرده و وارد حالت درج میشود.
- vi-open-line-below (نگاشتنشده) (o) (نگاشتنشده)
- یک خط در زیر مکاننما باز کرده و وارد حالت درج میشود.
- vi-oper-swap-case (نگاشتنشده) (g~) (نگاشتنشده)
- یک دستور حرکتی را از صفحهکلید میخواند، و بزرگی و کوچکی تمام نویسهها را از موقعیت مکاننما تا نقطه پایان حرکت معکوس میکند. اگر دستور حرکتی vi-oper-swap-case باشد، بزرگی و کوچکی تمام نویسههای خط جاری را معکوس میکند.
- overwrite-mode (^X^O) (نگاشتنشده) (نگاشتنشده)
- بین حالت رونویسی (overwrite) و حالت درج (insert) جابهجا میشود.
- vi-put-before (نگاشتنشده) (P) (نگاشتنشده)
- محتویات بافر حذف را قبل از مکاننما درج میکند. اگر بافر حذف شامل توالیای از خطوط (در مقایسه با نویسهها) باشد، آن را بالای خط جاری پیست میکند.
- vi-put-after (نگاشتنشده) (p) (نگاشتنشده)
- محتویات بافر حذف را بعد از مکاننما درج میکند. اگر بافر حذف شامل توالیای از خطوط باشد، آن را زیر خط جاری پیست میکند.
- put-replace-selection (نگاشتنشده) (نگاشتنشده) (نگاشتنشده)
- محتویات ناحیه یا انتخاب جاری را با محتویات بافر حذف جایگزین میکند. اگر بافر حذف شامل توالیای از خطوط باشد، خط جاری توسط خطوط پیستشده تقسیم میشود.
- quoted-insert (^V) (نگاشتنشده) (نگاشتنشده)
- نویسه تایپشده بعدی را عیناً در بافر درج میکند. نویسه وقفه (interrupt) درج نخواهد شد.
- vi-quoted-insert (نگاشتنشده) (نگاشتنشده) (^Q ^V)
- یک `^' در موقعیت مکاننما نمایش داده، و نویسه تایپشده بعدی را عیناً در بافر درج میکند. نویسه وقفه درج نخواهد شد.
- quote-line (ESC-') (نگاشتنشده) (نگاشتنشده)
- خط جاری را نقلقول میکند؛ یعنی یک نویسه `'' در ابتدا و انتهای آن قرار میدهد، و تمام نویسههای `'' را به `'\''' تبدیل میکند.
- quote-region (ESC-") (نگاشتنشده) (نگاشتنشده)
- ناحیه از مکاننما تا نشانگر را نقلقول میکند.
- vi-replace (نگاشتنشده) (R) (نگاشتنشده)
- وارد حالت رونویسی (overwrite mode) میشود.
- vi-repeat-change (نگاشتنشده) (.) (نگاشتنشده)
- آخرین تغییر متن در حالت vi را تکرار میکند. اگر شمارشی همراه با تغییر استفاده شده بود، به خاطر سپرده میشود. اگر شمارشی به این دستور داده شود، شمارش بهخاطرسپردهشده را بازنویسی کرده و برای استفادههای بعدی به خاطر سپرده میشود. مشخصه cut buffer نیز به همین ترتیب به خاطر سپرده میشود.
- vi-replace-chars (نگاشتنشده) (r) (نگاشتنشده)
- نویسه زیر مکاننما را با نویسهای که از صفحهکلید خوانده میشود جایگزین میکند.
- self-insert (نویسههای قابل چاپ) (نگاشتنشده) (نویسههای قابل چاپ و برخی نویسههای کنترلی)
- یک نویسه را در موقعیت مکاننما در بافر درج میکند.
- self-insert-unmeta (ESC-^I ESC-^J ESC-^M) (نگاشتنشده) (نگاشتنشده)
- یک نویسه را پس از حذف بیت متا و تبدیل ^M به ^J در بافر درج میکند.
- vi-substitute (نگاشتنشده) (s) (نگاشتنشده)
- نویسه(های) بعدی را جایگزین میکند.
- vi-swap-case (نگاشتنشده) (~) (نگاشتنشده)
- بزرگی و کوچکی نویسه زیر مکاننما را معکوس کرده و از آن عبور میکند.
- transpose-chars (^T) (نگاشتنشده) (نگاشتنشده)
- اگر در انتهای خط باشد دو نویسه سمت چپ مکاننما را با هم جابهجا میکند، در غیر این صورت نویسه زیر مکاننما را با نویسه سمت چپ جابهجا میکند.
- transpose-words (ESC-T ESC-t) (نگاشتنشده) (نگاشتنشده)
- کلمه جاری را با کلمه قبل از آن جابهجا میکند.
با یک آرگومان عددی مثبت N، کلمه پیرامون مکاننما (یا بعد از آن اگر مکاننما میان کلمات باشد) با N کلمه قبلی جابهجا میشود. مکاننما در انتهای گروه کلمات حاصل قرار میگیرد.
با یک آرگومان عددی منفی -N، اثر مشابه استفاده از آرگومان مثبت N است به جز اینکه موقعیت اولیه مکاننما صرفنظر از نحوه چیدمان مجدد کلمات حفظ میشود.
- vi-unindent (نگاشتنشده) (<) (نگاشتنشده)
- تورفتگی تعدادی خط را کاهش میدهد.
- vi-up-case (نگاشتنشده) (gU) (نگاشتنشده)
- یک دستور حرکتی را از صفحهکلید میخواند، و تمام نویسهها از موقعیت مکاننما تا نقطه پایان حرکت را به حروف بزرگ تبدیل میکند. اگر دستور حرکتی vi-up-case باشد، بزرگی و کوچکی تمام نویسههای خط جاری را معکوس میکند.
- up-case-word (ESC-U ESC-u) (نگاشتنشده) (نگاشتنشده)
- کلمه جاری را به حروف تماماً بزرگ تبدیل کرده و از آن عبور میکند.
- yank (^Y) (نگاشتنشده) (نگاشتنشده)
- محتویات بافر حذف را در موقعیت مکاننما درج میکند.
- yank-pop (ESC-y) (نگاشتنشده) (نگاشتنشده)
- متن به تازگی یانکشده را حذف میکند، حلقه حذف (kill-ring) را میچرخاند و بالای جدید را یانک میکند. تنها به دنبال yank، vi-put-before، vi-put-after یا yank-pop کار میکند.
- vi-yank (نگاشتنشده) (y) (نگاشتنشده)
- یک دستور حرکتی را از صفحهکلید میخواند، و ناحیه از موقعیت مکاننما تا نقطه پایان حرکت را در بافر حذف کپی میکند. اگر دستور vi-yank باشد، خط جاری را کپی میکند.
- vi-yank-whole-line (نگاشتنشده) (Y) (نگاشتنشده)
- خط جاری را در بافر حذف کپی میکند.
- vi-yank-eol
- ناحیه از موقعیت مکاننما تا انتهای خط را در بافر حذف کپی میکند. احتمالاً این همان کاری است که Y باید در vi انجام دهد، اما کاری نیست که در عمل انجام میدهد.
آرگومانها (Arguments)
- digit-argument (ESC-0..ESC-9) (1-9) (نگاشتنشده)
- یک آرگومان عددی جدید را شروع میکند، یا به آرگومان فعلی اضافه میکند. همچنین به vi-digit-or-beginning-of-line مراجعه کنید. این دستور تنها در صورتی کار میکند که به توالی کلیدی ختمشده به یک رقم دهدهی نگاشت شده باشد.
در داخل یک تابع ویجت، فراخوانی این تابع آخرین کلید از توالی کلیدی را که ویجت را فراخوانی کرده است به عنوان رقم در نظر میگیرد.
- neg-argument (ESC--) (نگاشتنشده) (نگاشتنشده)
- علامت آرگومان بعدی را تغییر میدهد.
- universal-argument
- آرگومان دستور بعدی را در 4 ضرب میکند. در غیر این صورت، اگر این دستور با یک عدد صحیح (مثبت یا منفی) دنبال شود، از آن به عنوان آرگومان برای دستور بعدی استفاده میکند. بنابراین ارقام را نمیتوان با استفاده از این دستور تکرار کرد. برای مثال، اگر این دستور دو بار تکرار شود و بلافاصله forward-char بیاید، شانزده فاصله به جلو حرکت میکند؛ اگر در عوض با -2 و سپس forward-char دنبال شود، دو فاصله به عقب حرکت میکند.
در داخل یک تابع ویجت، اگر یک آرگومان به آن ارسال شود (یعنی `zle universal-argument num')، آرگومان عددی روی num تنظیم خواهد شد؛ این معادل با `NUMERIC=num' است.
- argument-base
- از آرگومان عددی موجود به عنوان یک مبنای عددی (base) استفاده میکند که باید در محدوده 2 تا 36 فراگیر باشد. استفاده بعدی از digit-argument و universal-argument یک آرگومان عددی جدید در مبنای دادهشده وارد خواهد کرد. از قرارداد معمول هگزادسیمال استفاده میشود: حرف a یا A متناظر با 10 است و به همین ترتیب. آرگومانها در مبناهایی که نیاز به ارقام 10 به بالا دارند به شکل راحتتری با universal-argument وارد میشوند، زیرا ESC-a و غیره معمولاً به digit-argument نگاشت نشدهاند.
این تابع را میتوان همراه با یک آرگومان دستور در داخل یک ویجت تعریفشده توسط کاربر استفاده کرد. کد زیر مبنا را روی 16 تنظیم میکند و به کاربر امکان میدهد تا زمانی که کلیدی خارج از محدوده ارقام تایپ شود یک آرگومان هگزادسیمال وارد کند:
zle argument-base 16 zle universal-argument
تکمیل خودکار (Completion)
- accept-and-menu-complete
- در تکمیل منویی، گزینه تکمیل فعلی را در بافر درج کرده و به گزینه تکمیل ممکن بعدی میرود.
- complete-word
- تلاش برای تکمیل کلمه جاری انجام میدهد.
- delete-char-or-list (^D) (نگاشتنشده) (نگاشتنشده)
- نویسه زیر مکاننما را حذف میکند. اگر مکاننما در انتهای خط باشد، گزینههای ممکن برای تکمیل کلمه جاری را فهرست میکند.
- expand-cmd-path
- دستور جاری را به نام مسیر کامل آن گسترش میدهد.
- expand-or-complete (TAB) (نگاشتنشده) (TAB)
- تلاش برای گسترش شل روی کلمه جاری انجام میدهد. اگر ناموفق باشد، تلاش برای تکمیل خودکار میکند.
- expand-or-complete-prefix
- تلاش برای گسترش شل روی کلمه جاری تا مکاننما انجام میدهد.
- expand-history (ESC-space ESC-!) (نگاشتنشده) (نگاشتنشده)
- گسترش تاریخچه را روی بافر ویرایش اعمال میکند.
- expand-word (^X*) (نگاشتنشده) (نگاشتنشده)
- تلاش برای گسترش شل روی کلمه جاری انجام میدهد.
- list-choices (ESC-^D) (^D =) (^D)
- تکمیلهای ممکن برای کلمه جاری را فهرست میکند.
- list-expand (^Xg ^XG) (^G) (^G)
- گسترش کلمه جاری را فهرست میکند.
- magic-space
- گسترش تاریخچه را انجام داده و یک فاصله در بافر درج میکند. این دستور برای نگاشت به کلید فاصله در نظر گرفته شده است.
- مشابه complete-word، با این تفاوت که از تکمیل منویی استفاده میشود. به گزینه MENU_COMPLETE مراجعه کنید.
- مشابه expand-or-complete، با این تفاوت که از تکمیل منویی استفاده میشود.
- reverse-menu-complete
- تکمیل منویی را انجام میدهد، مشابه menu-complete، با این تفاوت که اگر تکمیل منویی از قبل در حال انجام باشد، به جای گزینه بعدی به گزینه تکمیل قبلی میرود.
- end-of-list
- هنگامی که یک تکمیل قبلی فهرستی را در زیر پرامپت نمایش داده باشد، از این ویجت میتوان برای انتقال پرامپت به زیر فهرست استفاده کرد.
متفرقه (Miscellaneous)
- accept-and-hold (ESC-A ESC-a) (نگاشتنشده) (نگاشتنشده)
- محتویات بافر را در پشته بافر قرار داده و آن را اجرا میکند.
- accept-and-infer-next-history
- محتویات بافر را اجرا میکند. سپس لیست تاریخچه را برای یافتن خطی مطابق با خط فعلی جستجو کرده و رویداد پس از آن را در پشته بافر قرار میدهد.
- accept-line (^J ^M) (^J ^M) (^J ^M)
- ویرایش بافر را به پایان میرساند. به طور معمول این کار باعث میشود بافر به عنوان یک دستور شل اجرا شود.
- accept-line-and-down-history (^O) (نگاشتنشده) (نگاشتنشده)
- خط جاری را اجرا کرده و رویداد تاریخچه بعدی را در پشته بافر قرار میدهد.
- auto-suffix-remove
- اگر اقدام قبلی یک پسوند (فاصله، اسلش و غیره) به کلمه روی خط فرمان اضافه کرده باشد، آن را حذف میکند. در غیر این صورت کاری انجام نمیدهد. حذف پسوند به هرگونه تکمیل منویی یا انتخاب منوی فعال پایان میدهد.
این ویجت برای فراخوانی از ویجتهای تعریفشده توسط کاربر جهت اعمال رفتار حذف پسوند مورد نظر طراحی شده است.
- auto-suffix-retain
- اگر اقدام قبلی یک پسوند (فاصله، اسلش و غیره) به کلمه روی خط فرمان اضافه کرده باشد، اجبار به حفظ آن میکند. در غیر این صورت کاری انجام نمیدهد. حفظ پسوند به هرگونه تکمیل منویی یا انتخاب منوی فعال پایان میدهد.
این ویجت برای فراخوانی از ویجتهای تعریفشده توسط کاربر جهت اعمال رفتار حفظ پسوند مورد نظر طراحی شده است.
- beep
- بوق میزند، مگر اینکه گزینه BEEP غیرفعال باشد.
- bracketed-paste (^[[200~) (^[[200~) (^[[200~)
- این ویجت هنگامی که متنی در شبیهساز ترمینال پیست میشود فراخوانی میگردد. این ویجت برای نگاشت به کلیدهای واقعی در نظر گرفته نشده است بلکه برای توالی ویژهای است که توسط شبیهساز ترمینال هنگام پیست متن تولید میشود.
هنگامی که به صورت تعاملی فراخوانی شود، متن پیستشده در بافر درج شده و در cutbuffer قرار میگیرد. اگر یک آرگومان عددی داده شود، نقلقول شل (shell quoting) قبل از درج روی متن پیستشده اعمال خواهد شد.
هنگامی که یک بافر نامگذاریشده با vi-set-buffer ("x) مشخص شده باشد، متن پیستشده در آن بافر نامگذاریشده ذخیره میشود اما درج نخواهد شد.
هنگامی که از یک تابع ویجت به صورت `bracketed-paste name` فراخوانی شود، متن پیستشده به متغیر name اختصاص داده میشود و هیچ پردازش دیگری انجام نمیشود.
همچنین به پارامتر zle_bracketed_paste مراجعه کنید.
- vi-cmd-mode (^X^V) (نگاشتنشده) (^[)
- وارد حالت فرمان میشود؛ یعنی نقشهکلید `vicmd' را انتخاب میکند. بله، این دستور به طور پیشفرض در حالت emacs نیز نگاشت شده است.
- vi-caps-lock-panic
- تا زمانی که یک کلید با حروف کوچک فشرده شود معلق میماند. این ویژگی برای کاربران vi است که توانایی ذهنی برای پیگیری کلید caps lock خود را ندارند (مانند نویسنده).
- clear-screen (^L ESC-^L) (^L) (^L)
- صفحه را پاک کرده و پرامپت را مجدداً ترسیم میکند.
- deactivate-region
- ناحیه فعلی را غیرفعال میکند. این کار حالت انتخاب بصری به سبک vim را در صورت فعال بودن غیرفعال میسازد.
- describe-key-briefly
- یک توالی کلید را میخواند، سپس تابعی را که به آن توالی نگاشت شده چاپ میکند.
- exchange-point-and-mark (^X^X) (نگاشتنشده) (نگاشتنشده)
- موقعیت مکاننما (point) را با موقعیت نشانگر (mark) جابهجا میکند. مگر اینکه یک آرگومان عددی منفی داده شود، ناحیه میان نقطه و نشانگر فعال میشود تا بتوان آن را برجسته کرد. اگر یک آرگومان عددی صفر داده شود، ناحیه فعال میشود اما نقطه و نشانگر جابهجا نمیشوند.
- execute-named-cmd (ESC-x) (:) (نگاشتنشده)
- نام یک دستور ویرایشگر را میخواند و آن را اجرا میکند. نام مستعار دادن به این ویجت با `zle -A' یا جایگزینی آن با `zle -N' هنگام تفسیر نگاشتهای کلید اثری ندارد، اما `zle execute-named-cmd' چنین نام مستعار یا جایگزینی را فراخوانی خواهد کرد.
مجموعه محدودی از توابع ویرایشی در مینیبافر در دسترس است. کلیدها در نقشهکلید ویژه command جستجو میشوند، و اگر در آنجا یافت نشوند در نقشهکلید اصلی بررسی میگردند. سیگنال وقفه، همانطور که توسط تنظیمات stty تعریف شده است، تابع را لغو میکند. توجه داشته باشید که موارد زیر همیشه همان وظیفه را در محیط executed-named-cmd انجام میدهند و نمیتوان آنها را با ویجتهای تعریفشده توسط کاربر جایگزین کرد، و مجموعه توابع نیز قابل گسترش نیست. توابع مجاز عبارتند از: backward-delete-char، vi-backward-delete-char، clear-screen، redisplay، quoted-insert، vi-quoted-insert، backward-kill-word، vi-backward-kill-word، kill-whole-line، vi-kill-line، backward-kill-line، list-choices، delete-char-or-list، complete-word، accept-line، expand-or-complete و expand-or-complete-prefix.
دستور kill-region آخرین کلمه را حذف میکند، و با vi-cmd-mode مانند accept-line رفتار میشود. نویسههای فاصله و تب، اگر به یکی از این توابع نگاشت نشده باشند، نام را تکمیل کرده و در صورت تنظیم گزینه AUTO_LIST احتمالات را فهرست میکنند. هر نویسه دیگری که به self-insert یا self-insert-unmeta نگاشت نشده باشد بوق زده و نادیده گرفته میشود. از نگاشتهای حالت درج فعلی استفاده خواهد شد.
در حال حاضر این دستور ممکن است بازتعریف نشود یا با نام فراخوانی نگردد.
- execute-last-named-cmd (ESC-z) (نگاشتنشده) (نگاشتنشده)
- آخرین تابعی را که با execute-named-cmd اجرا شده بود ازنو انجام میدهد.
همانند execute-named-cmd، این دستور قابل بازتعریف نیست، اما میتوان آن را با نام فراخوانی کرد.
- get-line (ESC-G ESC-g) (نگاشتنشده) (نگاشتنشده)
- بالاترین خط را از پشته بافر خارج (pop) کرده و در موقعیت مکاننما درج میکند.
- pound-insert (نگاشتنشده) (#) (نگاشتنشده)
- اگر هیچ نویسه # در ابتدای بافر وجود نداشته باشد، یکی به ابتدای هر خط اضافه میکند. اگر وجود داشته باشد، یک # از هر خطی که دارد حذف میکند. در هر دو حالت، خط جاری را تأیید و اجرا میکند. گزینه INTERACTIVE_COMMENTS باید تنظیم شده باشد تا این دستور کاربردی داشته باشد.
- vi-pound-insert
- اگر هیچ نویسه # در ابتدای خط جاری وجود نداشته باشد، یکی اضافه میکند. اگر وجود داشته باشد، آن را حذف میکند. گزینه INTERACTIVE_COMMENTS باید تنظیم شده باشد تا این دستور کاربردی داشته باشد.
- push-input
- کل ساختار چندخطی جاری را در پشته بافر قرار داده و به پرامپت سطح بالا (PS1) بازمیگردد. اگر ساختار فعلی مفسر تنها یک خط باشد، این دستور دقیقاً مانند push-line عمل میکند. بار بعد که ویرایشگر شروع به کار میکند یا با get-line پاپ میشود، این ساختار از بالای پشته بافر برداشته شده و در بافر ویرایش بارگذاری میشود.
- push-line (^Q ESC-Q ESC-q) (نگاشتنشده) (نگاشتنشده)
- بافر فعلی را در پشته بافر قرار داده و بافر را پاک میکند. بار بعد که ویرایشگر شروع به کار میکند، بافر از بالای پشته بافر برداشته شده و در بافر ویرایش بارگذاری میشود.
- push-line-or-edit
- در پرامپت سطح بالا (PS1)، معادل با push-line است. در پرامپت ثانویه (PS2)، کل ساختار چندخطی جاری را به داخل بافر ویرایشگر منتقل میکند. دومی معادل با push-input و به دنبال آن get-line است.
- read-command
- تنها از درون یک ویجت تعریفشده توسط کاربر مفید است. فشردن یک کلید دقیقاً مانند عملکرد عادی خوانده میشود، اما به جای اجرای دستور، نام دستوری که قرار بود اجرا شود در پارامتر شل REPLY ذخیره میشود. این مقدار را میتوان به عنوان آرگومان دستور بعدی zle استفاده کرد. اگر توالی کلید نگاشت نشده باشد، وضعیت 1 بازگردانده میشود؛ اما معمولاً REPLY روی undefined-key تنظیم میشود تا نشاندهنده یک توالی کلید بیفایده باشد.
- recursive-edit
- تنها از درون یک ویجت تعریفشده توسط کاربر مفید است. در این نقطه از تابع، ویرایشگر مجدداً کنترل را به دست میگیرد تا زمانی که یکی از ویجتهای استاندارد که معمولاً باعث خروج zle میشوند (معمولاً یک accept-line ناشی از فشردن کلید return) اجرا شود. در عوض، کنترل به ویجت تعریفشده توسط کاربر بازمیگردد. اگر بازگشت ناشی از خطا باشد، وضعیت بازگرداندهشده غیرصفر است، اما تابع همچنان به اجرا ادامه میدهد و بنابراین میتواند عملیات پاکسازی را انجام دهد. این ویژگی باعث میشود ویجت تعریفشده توسط کاربر بتواند با اطمینان خط فرمان یا نگاشتهای کلید را موقتاً تغییر دهد.
ویجت زیر به نام caps-lock به عنوان یک مثال آورده شده است:
self-insert-ucase() {
LBUFFER+=${(U)KEYS[-1]}
}
integer stat
zle -N self-insert self-insert-ucase
zle -A caps-lock save-caps-lock
zle -A accept-line caps-lock
zle recursive-edit
stat=$?
zle -A .self-insert self-insert
zle -A save-caps-lock caps-lock
zle -D save-caps-lock
(( stat )) && zle send-break
return $stat
این ویجت باعث میشود حروف تایپشده به صورت بزرگ درج شوند تا زمانی که accept-line (یعنی معمولاً کلید return) تایپ شود یا ویجت caps-lock دوباره فراخوانی گردد؛ حالت دوم با ذخیره تعریف قبلی caps-lock به صورت save-caps-lock و سپس نگاشت مجدد آن برای فراخوانی accept-line مدیریت میشود. توجه داشته باشید که خطای ناشی از ویرایش بازگشتی به عنوان یک وضعیت بازگشتی غیرصفر شناسایی شده و با استفاده از ویجت send-break انتشار مییابد.
- redisplay (نگاشتنشده) (^R) (^R)
- بافر ویرایش را مجدداً نمایش میدهد.
- reset-prompt (نگاشتنشده) (نگاشتنشده) (نگاشتنشده)
- پرامپتهای هر دو سمت چپ و راست صفحه را مجبور به گسترش مجدد میکند، سپس بافر ویرایش را مجدداً نمایش میدهد. این کار هم تغییرات اعمالشده در متغیرهای خود پرامپت و هم تغییرات در گسترش مقادیر (برای مثال تغییر زمان یا دایرکتوری، یا تغییرات در مقدار متغیرهایی که در پرامپت به آنها اشاره شده است) را منعکس میکند.
در غیر این صورت، پرامپت تنها هر بار که zle راهاندازی میشود گسترش مییابد، و همچنین زمانی که نمایش توسط خروجی بخش دیگری از شل (مانند اعلان کار/job) قطع شده باشد که باعث چاپ مجدد خط فرمان گردد.
دستور reset-prompt پارامتر ویژه LASTWIDGET را تغییر نمیدهد.
- send-break (^G ESC-^G) (نگاشتنشده) (نگاشتنشده)
- تابع فعلی ویرایشگر را لغو میکند، مانند execute-named-command، یا خود ویرایشگر را اگر در vared باشید. در غیر این صورت، تجزیه خط جاری را لغو میکند؛ در این حالت خط لغوشده در متغیر شل ZLE_LINE_ABORTED در دسترس است. اگر ویرایشگر از درون vared لغو شود، متغیر ZLE_VARED_ABORTED تنظیم میشود.
- run-help (ESC-H ESC-h) (نگاشتنشده) (نگاشتنشده)
- بافر را در پشته بافر قرار داده و دستور `run-help cmd' را اجرا میکند، که در آن cmd دستور جاری است. run-help معمولاً نام مستعاری برای man است.
- vi-set-buffer (نگاشتنشده) (") (نگاشتنشده)
- بافری را مشخص میکند که باید در دستور بعدی استفاده شود. 37 بافر وجود دارند که میتوان آنها را مشخص کرد: 26 بافر «نامگذاریشده» "a تا "z، بافر «یانک» "0، نه بافر «صفبندیشده» "1 تا "9 و بافر «سیاهچاله» "_. بافرهای نامگذاریشده را میتوان به صورت "A تا "Z نیز مشخص کرد.
هنگامی که بافری برای یک دستور cut، change یا yank مشخص شود، متن مربوطه جایگزین محتویات قبلی بافر مشخصشده خواهد شد. اگر یک بافر نامگذاریشده با حرف بزرگ مشخص شود، متن به تازگی بریدهشده به جای رونویسی، به بافر الحاق میشود. هنگام استفاده از بافر "_، هیچ اتفاقی نمیافتد. این ویژگی میتواند برای حذف متن بدون تأثیر روی بافرها مفید باشد.
اگر هیچ بافری برای دستور cut یا change مشخص نشود، از "1 استفاده میشود، و محتویات "1 تا "8 هر کدام یک بافر به جلو شیفت پیدا میکنند؛ محتوای "9 از بین میرود. اگر هیچ بافری برای دستور yank مشخص نشود، از "0 استفاده میشود. در نهایت، یک دستور paste بدون بافر مشخصشده، متن را از جدیدترین دستور صرفنظر از هر بافری که ممکن است با آن دستور استفاده شده باشد، پیست خواهد کرد.
هنگامی که از یک تابع ویجت توسط دستور zle فراخوانی شود، بافر را میتوان به صورت اختیاری با یک آرگومان مشخص کرد. برای مثال،
zle vi-set-buffer A
- vi-set-mark (نگاشتنشده) (m) (نگاشتنشده)
- نشانگر مشخصشده را در موقعیت مکاننما قرار میدهد.
- set-mark-command (^@) (نگاشتنشده) (نگاشتنشده)
- نشانگر را در موقعیت مکاننما قرار میدهد. اگر با یک آرگومان عددی منفی فراخوانی شود، نشانگر را تنظیم نمیکند بلکه ناحیه را غیرفعال میکند تا دیگر برجسته نباشد (همچنان برای اهداف دیگر قابل استفاده است). در غیر این صورت ناحیه به عنوان فعال علامتگذاری میشود.
- spell-word (ESC-$ ESC-S ESC-s) (نگاشتنشده) (نگاشتنشده)
- تلاش برای تصحیح املای کلمه جاری انجام میدهد.
- split-undo
- توالی واگرد (undo) را در تغییر جاری میشکند. این ویژگی در حالت vi مفید است زیرا تغییرات ایجادشده در حالت درج هنگام ورود به حالت فرمان ادغام میشوند. به همین ترتیب، undo معمولاً تمام تغییرات ایجادشده توسط یک ویجت تعریفشده توسط کاربر را به صورت یکپارچه برمیگرداند.
- undefined-key
- این دستور هنگامی اجرا میشود که یک توالی کلید که به هیچ دستوری نگاشت نشده است تایپ شود. به طور پیشفرض بوق میزند.
- undo (^_ ^Xu ^X^U) (u) (نگاشتنشده)
- به صورت افزایشی آخرین تغییر متن را واگرد میکند. هنگامی که از یک ویجت تعریفشده توسط کاربر فراخوانی شود، یک آرگومان اختیاری میگیرد که وضعیت قبلی تاریخچه واگرد را همانطور که توسط متغیر UNDO_CHANGE_NO بازگردانده شده نشان میدهد؛ اصلاحات تا رسیدن به آن وضعیت واگرد میشوند، با رعایت هر محدودیتی که توسط متغیر UNDO_LIMIT_NO اعمال شده باشد.
توجه داشته باشید که هنگام فراخوانی از حالت فرمان vi، کل تغییر قبلی ایجادشده در حالت درج واگرد میشود، چرا که تغییرات هنگام انتخاب حالت فرمان ادغام شده بودند.
- redo (نگاشتنشده) (^R) (نگاشتنشده)
- به صورت افزایشی تغییرات متنی واگردشده را ازنو انجام میدهد.
- vi-undo-change (نگاشتنشده) (نگاشتنشده) (نگاشتنشده)
- آخرین تغییر متن را واگرد میکند. در صورت تکرار، تغییر را ازنو انجام میدهد.
- visual-mode (نگاشتنشده) (v) (نگاشتنشده)
- حالت انتخاب بصری به سبک vim را تغییر وضعیت میدهد. اگر حالت بصری سطری (line-wise) در حال حاضر فعال باشد، به حالت کاراکتری تغییر مییابد. اگر پس از یک عملگر استفاده شود، دستور حرکتی بعدی را مجبور میکند که به عنوان یک حرکت کاراکتری در نظر گرفته شود.
- visual-line-mode (نگاشتنشده) (V) (نگاشتنشده)
- حالت انتخاب بصری سطری به سبک vim را تغییر وضعیت میدهد. اگر حالت بصری کاراکتری در حال حاضر فعال باشد، به حالت سطری تغییر مییابد. اگر پس از یک عملگر استفاده شود، دستور حرکتی بعدی را مجبور میکند که به عنوان یک حرکت سطری در نظر گرفته شود.
- what-cursor-position (^X=) (ga) (نگاشتنشده)
- نویسه زیر مکاننما، کد آن به صورت عدد هشتهشتی، دهدهی و شانزدهشانزدهی، موقعیت فعلی مکاننما در داخل بافر و ستون مکاننما در خط جاری را چاپ میکند.
- where-is
- نام یک دستور ویرایشگر را میخواند و فهرست توالیهای کلیدی را که دستور مشخصشده را فراخوانی میکنند چاپ میکند. مجموعه محدودی از توابع ویرایشی در مینیبافر در دسترس است. کلیدها در نقشهکلید ویژه command و در صورت عدم وجود در آنجا، در نقشهکلید اصلی جستجو میشوند.
- which-command (ESC-?) (نگاشتنشده) (نگاشتنشده)
- بافر را در پشته بافر قرار داده و دستور `which-command cmd' را اجرا میکند، که در آن cmd دستور جاری است. which-command معمولاً نام مستعاری برای whence است.
- vi-digit-or-beginning-of-line (نگاشتنشده) (0) (نگاشتنشده)
- اگر آخرین دستور اجرا شده یک رقم به عنوان بخشی از یک آرگومان بوده است، آرگومان را ادامه میدهد. در غیر این صورت، vi-beginning-of-line را اجرا میکند.
اشیاء متنی (Text Objects)
اشیاء متنی دستوراتی هستند که میتوانند برای انتخاب بلوکی از متن بر اساس برخی معیارها استفاده شوند. آنها ویژگی ویرایشگر متن vim هستند و بنابراین در درجه اول برای استفاده با عملگرهای vi یا از حالت انتخاب بصری در نظر گرفته شدهاند. با این حال، میتوان از آنها از حالت vi-insert یا emacs نیز استفاده کرد. نگاشتهای کلید فهرستشده در زیر روی نقشهکلیدهای viopp و visual اعمال میشوند.
- select-a-blank-word (aW)
- یک کلمه را به همراه فاصلههای خالی مجاور انتخاب میکند، که در آن یک کلمه به عنوان مجموعهای از نویسههای غیرفاصله تعریف میشود. با یک آرگومان عددی، چندین کلمه انتخاب خواهند شد.
- select-a-shell-word (aa)
- آرگومان دستور جاری را با اعمال قواعد عادی نقلقول انتخاب میکند.
- select-a-word (aw)
- یک کلمه را به همراه فاصلههای مجاور با استفاده از تعریف کلمه عادی به سبک vi انتخاب میکند. با یک آرگومان عددی، چندین کلمه انتخاب خواهند شد.
- select-in-blank-word (iW)
- یک کلمه را انتخاب میکند، که در آن یک کلمه به عنوان مجموعهای از نویسههای غیرفاصله تعریف میشود. با یک آرگومان عددی، چندین کلمه انتخاب خواهند شد.
- select-in-shell-word (ia)
- آرگومان دستور جاری را با اعمال قواعد عادی نقلقول انتخاب میکند. اگر آرگومان با نویسههای نقلقول منطبق شروع و پایان یابد، این نویسهها در انتخاب گنجانده نمیشوند.
- select-in-word (iw)
- یک کلمه را با استفاده از تعریف کلمه عادی به سبک vi انتخاب میکند. با یک آرگومان عددی، چندین کلمه انتخاب خواهند شد.
برجستهسازی نویسهها (CHARACTER HIGHLIGHTING)
ویرایشگر خط دارای قابلیت برجستهسازی (highlight) نویسهها یا نواحیای از خط است که اهمیت خاصی دارند. این قابلیت توسط پارامتر آرایهای zle_highlight، در صورت تنظیم توسط کاربر، کنترل میشود.
اگر این پارامتر حاوی ورودی منفرد none باشد، تمام برجستهسازیها خاموش میشوند. توجه داشته باشید که همچنان انتظار میرود این پارامتر یک آرایه باشد.
در غیر این صورت، هر ورودی آرایه باید شامل کلمهای باشد که یک زمینه (context) را برای برجستهسازی مشخص میکند، سپس یک دونقطه (:)، و بعد فهرستی از انواع برجستهسازیها که با کاما از هم جدا شدهاند تا در آن زمینه اعمال شوند.
زمینههای موجود برای برجستهسازی عبارتند از:
- default
- هر متنی درون خط فرمان که تحت تأثیر هیچ برجستهسازی دیگری قرار نگرفته باشد. متن خارج از ناحیه قابل ویرایش خط فرمان تحت تأثیر قرار نمیگیرد.
- isearch
- هنگامی که یکی از ویجتهای جستجوی افزایشی تاریخچه فعال است، ناحیهای از خط فرمان که توسط رشته یا الگوی جستجو مطابقت داده شده است.
- region
- متن انتخابشده فعلی. در اصطلاحات emacs، این به عنوان ناحیه (region) نامیده میشود و توسط مکاننما (point) و نشانگر (mark) محدود میگردد. ناحیه تنها زمانی برجسته میشود که فعال باشد، که پس از تغییر نشانگر با set-mark-command یا exchange-point-and-mark چنین است. توجه داشته باشید که فعال بودن یا نبودن ناحیه تأثیری بر استفاده از آن در ویجتهای سبک emacs ندارد، بلکه صرفاً مشخص میکند که آیا برجسته میشود یا خیر. در حالت vi، ناحیه متناظر با متن انتخابشده در حالت visual است.
- special
- نویسههای منفردی که نمایش مستقیم قابل چاپ ندارند اما به شکل خاصی توسط ویرایشگر خط نشان داده میشوند. این نویسهها در ادامه شرح داده شدهاند.
- suffix
- این زمینه در تکمیل خودکار برای نویسههایی استفاده میشود که به عنوان پسوندهایی علامتگذاری شدهاند که در صورت پایان تکمیل در آن نقطه حذف خواهند شد، واضحترین نمونه یک اسلش (/) پس از نام دایرکتوری است. توجه داشته باشید که حذف پسوند قابل پیکربندی است؛ شرایطی که تحت آن پسوند حذف خواهد شد ممکن است برای تکمیلهای مختلف متفاوت باشد.
- paste
- به دنبال دستوری برای پیست کردن متن، نویسههایی که درج شدهاند.
هنگامی که region_highlight تنظیم شده باشد، زمینههایی که یک ناحیه را توصیف میکنند -- isearch، region، suffix و paste -- ابتدا اعمال میشوند، سپس region_highlight اعمال میگردد، و در نهایت سایر زمینههای zle_highlight اعمال میشوند. اگر یک نویسه خاص تحت تأثیر چندین مشخصه قرار گیرد، آخرین مشخصه برنده است.
پارامتر zle_highlight ممکن است شامل فیلدهای اضافی برای کنترل نحوه ارسال توالیهای ترمینال جهت تغییر رنگها باشد. هر یک از موارد زیر با یک دونقطه و رشتهای به همان شکل نگاشتهای کلید دنبال میشوند. این کار برای اکثریت قریب به اتفاق ترمینالها لازم نخواهد بود زیرا مقادیر پیشفرض نشاندادهشده در پرانتزها به طور گسترده استفاده میشوند.
- fg_start_code (\e[3)
- شروع توالی فرار (escape) برای رنگ پیشزمینه. این توالی با یک تا سه رقم ASCII که نمایانگر رنگ هستند دنبال میشود. تنها برای رنگهای پالت استفاده میشود، یعنی نه برای رنگهای 24 بیتی مشخصشده با سهگانه رنگی.
- fg_default_code (9)
- عددی که باید به جای رنگ برای بازنشانی رنگ پیشزمینه پیشفرض استفاده شود.
- fg_end_code (m)
- پایان توالی فرار برای رنگ پیشزمینه.
- bg_start_code (\e[4)
- شروع توالی فرار برای رنگ پسزمینه. fg_start_code را در بالا ببینید.
- bg_default_code (9)
- عددی که باید به جای رنگ برای بازنشانی رنگ پسزمینه پیشفرض استفاده شود.
- bg_end_code (m)
- پایان توالی فرار برای رنگ پسزمینه.
انواع موجود برجستهسازی عبارتند از موارد زیر. توجه داشته باشید که همه انواع برجستهسازی روی همه ترمینالها در دسترس نیستند:
- none
- هیچ برجستهسازی روی زمینه دادهشده اعمال نمیشود. حضور این گزینه همراه با سایر انواع برجستهسازی مفید نیست؛ برای بازنویسی یک مقدار پیشفرض استفاده میشود.
- fg=colour
- رنگ پیشزمینه باید روی colour تنظیم شود، یک عدد صحیح دهدهی، نام یکی از هشت رنگ با بیشترین پشتیبانی یا به صورت یک `#' به همراه سهگانه RGB در قالب هگزادسیمال.
همه ترمینالها از این قابلیت پشتیبانی نمیکنند و از میان آنهایی که پشتیبانی میکنند، همه امکاناتی برای آزمایش پشتیبانی فراهم نمیسازند، بنابراین کاربر باید بر اساس نوع ترمینال تصمیم بگیرد. اکثر ترمینالها از رنگهای black، red، green، yellow، blue، magenta، cyan و white پشتیبانی میکنند که میتوان آنها را با نام تنظیم کرد. علاوه بر این، default ممکن است برای تنظیم رنگ پیشزمینه پیشفرض ترمینال استفاده شود. مخففها مجاز هستند؛ b یا bl رنگ سیاه (black) را انتخاب میکند. برخی ترمینالها در صورت وجود صفت bold ممکن است رنگهای اضافی تولید کنند.
روی ترمینالهای جدید و سیستمهای دارای پایگاهداده ترمینال بهروز، تعداد رنگهای پشتیبانیشده را میتوان با دستور `echotc Co' آزمایش کرد؛ اگر موفقیتآمیز باشد، محدودیتی را در تعداد رنگها نشان میدهد که توسط ویرایشگر خط اعمال خواهد شد. تعداد رنگها در هر صورت به 256 (یعنی محدوده 0 تا 255) محدود است.
برخی از شبیهسازهای مدرن ترمینال از رنگ واقعی 24 بیتی (16 میلیون رنگ) پشتیبانی میکنند. در این حالت، میتوان از قالب سهگانه هگز استفاده کرد. این شامل یک `#' است که با یک عدد هگزادسیمال سه یا شش رقمی که اجزای قرمز، سبز و آبی رنگ را توصیف میکند دنبال میشود. سهگانههای هگز را میتوان با ترمینالهای 88 و 256 رنگ نیز از طریق ماژول zsh/nearcolor (به zshmodules(1) مراجعه کنید) استفاده کرد.
Colour همچنین به صورت color شناخته میشود.
- bg=colour
- رنگ پسزمینه باید روی colour تنظیم شود. این ویژگی مشابه رنگ پیشزمینه عمل میکند، با این تفاوت که پسزمینه معمولاً تحت تأثیر صفت bold قرار نمیگیرد.
- bold
- نویسهها در زمینه دادهشده با فونت پررنگ (bold) نمایش داده میشوند. همه ترمینالها فونتهای بولد را متمایز نمیکنند.
- standout
- نویسهها در زمینه دادهشده در حالت standout ترمینال نمایش داده میشوند. اثر واقعی مخصوص ترمینال است؛ در بسیاری از ترمینالها ویدئوی معکوس (inverse video) است. در برخی از این ترمینالها که مکاننما چشمک نمیزند با حالت standout نفیشده ظاهر میشود که تشخیص محل دقیق مکاننما را دشوار میسازد. در چنین ترمینالهایی ممکن است یکی از جلوههای دیگر برای برجستهسازی ناحیه و رشته جستجوی مطابقتیافته ترجیح داده شود.
- underline
- نویسهها در زمینه دادهشده به صورت زیرخطدار نمایش داده میشوند. برخی ترمینالها در عوض پیشزمینه را با رنگ متفاوتی نشان میدهند؛ در این حالت فاصلههای خالی برجسته نخواهند شد.
نویسههایی که در بالا به عنوان `ویژه (special)' توصیف شدند عبارتند از موارد زیر. قالببندی توصیفشده در اینجا صرفنظر از اینکه نویسهها برجسته شده باشند یا خیر استفاده میشود:
- نویسههای کنترلی ASCII
- نویسههای کنترلی در محدوده ASCII به صورت `^' به همراه نویسه پایه نمایش داده میشوند.
- نویسههای چندبایتی غیرقابل چاپ
- این مورد برای نویسههای کنترلی خارج از محدوده ASCII، به علاوه سایر نویسهها به شرح زیر اعمال میشود. اگر گزینه MULTIBYTE فعال باشد، نویسههای چندبایتی خارج از مجموعه نویسههای ASCII که دارای عرض صفر گزارش شدهاند، هنگامی که گزینه COMBINING_CHARS روشن است به عنوان نویسههای ترکیبی (combining characters) در نظر گرفته میشوند. اگر گزینه خاموش باشد، یا اگر نویسهای در جایی ظاهر شود که نویسه ترکیبی معتبر نیست، نویسه به عنوان غیرقابل چاپ در نظر گرفته میشود.
نویسههای چندبایتی غیرقابل چاپ به صورت یک عدد هگزادسیمال میان براکتهای زاویهدار (<...>) نمایش داده میشوند. این عدد نقطه کد (code point) نویسه در مجموعه نویسههای عریض است؛ این ممکن است بسته به سیستمعامل، یونیکد باشد یا نباشد.
- نویسههای چندبایتی نامعتبر
- اگر گزینه MULTIBYTE فعال باشد، هر توالی از یک یا چند بایت که نویسه معتبری را در مجموعه نویسههای جاری تشکیل ندهد به عنوان یک سری بایت در نظر گرفته میشود که هر کدام به صورت یک نویسه خاص نشان داده میشوند. این حالت را میتوان از سایر نویسههای غیرقابل چاپ متمایز کرد زیرا بایتها به صورت دو رقم هگزادسیمال میان براکتهای زاویهدار نشان داده میشوند، در مقایسه با چهار یا هشت رقمی که برای نویسههای غیرقابل چاپی استفاده میشود که با این وجود در مجموعه نویسههای جاری معتبر هستند.
همه سیستمها از این ویژگی پشتیبانی نمیکنند: برای کارکرد آن، نمایش نویسههای عریض در سیستم باید مقادیر کدی از مجموعه نویسههای جهانی (Universal Character Set) باشد، همانطور که توسط ISO 10646 (همچنین به عنوان یونیکد شناخته میشود) تعریف شده است.
- نویسههای با عرض دوگانه شکستهشده به سطر بعد (Wrapped double-width characters)
- هنگامی که یک نویسه با عرض دوگانه در ستون پایانی یک خط ظاهر میشود، به جای آن در خط بعدی نمایش داده میشود. فضای خالی باقیمانده در موقعیت اصلی به عنوان یک نویسه خاص برجسته میشود.
اگر zle_highlight تنظیم نشده باشد یا هیچ مقداری برای یک زمینه خاص اعمال نشود، مقادیر پیشفرض اعمالشده معادل با موارد زیر هستند:
zle_highlight=(region:standout special:standout suffix:bold isearch:underline paste:standout)
یعنی هر دو نویسههای ناحیه و نویسههای خاص در حالت standout نمایش داده میشوند.
درون ویجتها، نواحی دلخواه را میتوان با تنظیم پارامتر آرایهای ویژه region_highlight برجسته کرد؛ به بخش بالا مراجعه کنید.
| July 12, 2026 | zsh 5.9.2 |