FISH-INTERACTIVE(1) fish-shell FISH-INTERACTIVE(1)

fish-interactive - قابلیت‌ها و ویژگی‌های استفاده تعاملی در پوسته فیش

پوستهٔ fish به داشتن محیطی بسیار دلپذیر و کارآمد برای استفادهٔ تعاملی افتخار می‌کند. این امر به دلیل ویژگی‌های متعددی است که در بخش‌های بعدی توضیح خواهیم داد.

استفاده از fish با وارد کردن دستورات به زبان فیش انجام می‌پذیرد؛ برای کسب اطلاعات بیشتر در این مورد، سند The fish Language <> را ببینید.

پوستهٔ fish دارای سامانهٔ راهنمای جامعی است. از دستور help <> برای دریافت راهنما در مورد یک موضوع یا دستور خاص استفاده کنید. برای نمونه، نوشتن help syntax بخش نحو <#syntax> از این مستندات را نمایش می‌دهد.

همچنین fish برای دستورات خود دارای صفحات راهنما (man) است و صفحات راهنما را به صفحات man ترجمه می‌کند. به عنوان مثال، man set مستندات دستور set را به عنوان یک صفحه راهنما نشان می‌دهد.

راهنمای یک دستور توکار مشخص را می‌توان با پارامتر -h نیز دریافت کرد. برای مثال، برای دریافت راهنما در مورد دستور توکار fg <>، می‌توانید fg -h یا help fg را وارد کنید.

صفحه اصلی از طریق help index (یا صرفاً help) یا man fish-doc قابل مشاهده است. آموزش گام‌به‌گام را نیز می‌توان با help tutorial یا man fish-tutorial مشاهده کرد.

پوستهٔ fish هم‌زمان با تایپ کردن شما، بر اساس تاریخچه دستورات، تکمیل‌ها و مسیرهای معتبر فایل، دستوراتی را پیشنهاد می‌دهد. همان‌طور که دستورات را تایپ می‌کنید، پیشنهادی پس از مکان‌نما به رنگ خاکستری ملایم نمایش داده می‌شود (که با متغیر fish_color_autosuggestion قابل تغییر است).

برای پذیرش پیشنهاد خودکار (که جایگزین محتوای خط فرمان می‌شود)، کلید جهت‌نمای right (→) یا ctrl-f را فشار دهید. برای پذیرش تنها اولین کلمهٔ پیشنهادشده، کلیدهای ترکیبی alt-right (→) یا alt-f را فشار دهید. اگر پیشنهاد خودکار مورد نظر شما نیست، آن را نادیده بگیرید: تا زمانی که آن را نپذیرید، اجرا نخواهد شد.

پیشنهادهای خودکار روشی قدرتمند برای فراخوانی سریع دستوراتی هستند که مکرراً وارد می‌کنید، تنها با تایپ چند نویسهٔ اول آن‌ها. این قابلیت همچنین روشی کارآمد برای پیمایش در ساختار سلسله‌مراتبی دایرکتوری‌ها است.

اگر تمایلی به استفاده از پیشنهادهای خودکار ندارید، می‌توانید با تنظیم متغیر $fish_autosuggestion_enabled روی مقدار 0 آن‌ها را غیرفعال کنید:

set -g fish_autosuggestion_enabled 0

تکمیل با کلید تب یکی از ویژگی‌های صرفه‌جویی در زمان در هر پوستهٔ مدرنی است. هنگامی که کلید tab را فشار می‌دهید، fish تلاش می‌کند بقیهٔ کلمهٔ زیر مکان‌نما را حدس بزند. اگر دقیقاً یک احتمال پیدا کند، آن را درج می‌کند. اگر احتمالات بیشتری پیدا کند، طولانی‌ترین بخش بدون ابهام را درج کرده و سپس منویی (پیجر یا "pager") را باز می‌کند که می‌توانید در آن به دنبال گزینه مورد نظر خود بگردید.

می‌توانید با کلیدهای جهت‌نما، pageup / pagedown، tab یا shift-tab در پیجر پیمایش کنید. فشردن ctrl-s (کلید میانبر pager-toggle-search - یا / در حالت vi) منوی جستجویی را باز می‌کند که می‌توانید با آن فهرست را فیلتر کنید.

پوستهٔ fish تکمیل‌های عمومی مختلفی مانند دستورات، نام‌های متغیرها، نام‌های کاربری یا فایل‌ها را فراهم می‌کند.

همچنین تعداد زیادی تکمیل اسکریپت‌شده مخصوص برنامه‌ها ارائه می‌دهد. بیشتر این موارد گزینه‌های ساده‌ای مانند گزینهٔ -l برای ls هستند، اما بسیاری از آن‌ها پیشرفته‌ترند. برای مثال:

  • دستورات man و whatis صفحات راهنمای نصب‌شده را به عنوان تکمیل نمایش می‌دهند.
  • دستور make از هدف‌های موجود در Makefile در دایرکتوری فعلی به عنوان تکمیل استفاده می‌کند.
  • دستور mount از نقاط اتصال مشخص‌شده در fstab به عنوان تکمیل بهره می‌گیرد.
  • مدیر بسته‌های apt، rpm و yum بسته‌های نصب‌شده یا قابل‌نصب را نمایش می‌دهند.

همچنین می‌توانید تکمیل‌های اختصاصی خود را بنویسید یا تکمیل‌هایی را که از دیگران دریافت کرده‌اید نصب کنید. برای این منظور به بخش نگارش تکمیل‌های اختصاصی (Writing your own completions) <> مراجعه فرمایید.

اسکریپت‌های تکمیل بنا به نیاز لود می‌شوند، درست مانند بارگذاری خودکار توابع <#syntax-function-autoloading>. تفاوت در این است که فهرست متغیر $fish_complete_path <#variables-lists> به جای $fish_function_path استفاده می‌شود. معمولاً می‌توانید تکمیل‌های جدید را در مسیر ~/.config/fish/completions/<name-of-command>.fish قرار دهید و fish آن‌ها را به‌طور خودکار پیدا خواهد کرد.

پوستهٔ fish خط فرمان را هم‌زمان با تایپ شدن تفسیر کرده و از برجسته‌سازی نحو برای ارائهٔ بازخورد به کاربر استفاده می‌کند. مهم‌ترین بازخورد، تشخیص خطاهای بالقوه است. به‌طور پیش‌فرض، خطاها با رنگ قرمز مشخص می‌شوند.

خطاهای شناسایی‌شده عبارتند از:

  • دستورات ناموجود و ناشناخته.
  • خواندن از یک فایل ناموجود یا افزودن به آن.
  • استفاده نادرست از تغییرمسیرهای خروجی.
  • پرانتزهای جفت‌نشده و نامتقارن.

برای سفارشی‌سازی برجسته‌سازی نحو، می‌توانید متغیرهای محیطی فهرست‌شده در بخش متغیرهای تغییر رنگ‌های برجسته‌سازی را تنظیم کنید.

همچنین fish پوسته‌های رنگی از پیش‌آماده‌ای فراهم می‌کند که می‌توانید با دستور fish_config <> آن‌ها را انتخاب کنید. اجرای دستور fish_config به تنهایی یک رابط کاربری مرورگر را باز می‌کند، یا می‌توانید از fish_config theme مستقیماً در fish استفاده کنید:

# غیرفعال کردن تقریباً تمام رنگ‌آمیزی‌ها
fish_config theme choose none
# بازگردانی پوسته پیش‌فرض فیش
fish_config theme choose default

یا برای مشاهده تمامی پوسته‌ها، مستقیماً درون ترمینال:

fish_config theme show

برای به‌روزرسانی پوستهٔ تمام نشست‌های پوسته بدون راه‌اندازی مجدد آن‌ها، ابتدا با افزودن کد زیر به فایل config.fish <#configuration> و راه‌اندازی مجدد، به نشست‌ها اجازه دهید یک مدیریت‌کنندهٔ رویداد (event handler) <#event> تعریف کنند:

function apply-my-theme --on-variable=my_theme
    fish_config theme choose $my_theme
end

سپس، متغیر سراسری (universal variable) متناظر <#variables-universal> را از هر نشستی تنظیم نمایید:

> set -U my_theme lava
> set -U my_theme snow-day

رنگ‌های استفاده‌شده توسط fish برای برجسته‌سازی نحو را می‌توان با تغییر مقادیر متغیرهای گوناگون پیکربندی کرد. مقدار این متغیرها می‌تواند یکی از رنگ‌های پذیرفته‌شده توسط دستور set_color <> باشد. گزینه‌های پذیرفته‌شده توسط set_color مانند --foreground=، --background=، --bold، --dim، --italics، --reverse، --strikethrough، --underline و --underline-color= نیز قابل استفاده هستند.

مثال: برای نمایش خطاها به صورت پررنگ (bold) و قرمز، از دستور زیر استفاده کنید:

set fish_color_error red --bold

متغیرهای زیر برای تغییر رنگ‌های برجسته‌سازی در fish در دسترس هستند:

متغیر مفهوم و کاربرد
0.0 fish_color_normal 168u رنگ پیش‌فرض
0.0 fish_color_command 168u دستوراتی مانند echo
0.0 fish_color_builtin 168u دستورات توکار مانند cd و set - در صورت عدم تنظیم، به رنگ دستور برمی‌گردد
0.0 fish_color_function 168u توابع تعریف‌شده توسط کاربر - در صورت عدم تنظیم، به رنگ دستور برمی‌گردد
0.0 fish_color_keyword 168u کلمات کلیدی مانند if - در صورت عدم تنظیم، به رنگ دستور برمی‌گردد
0.0 fish_color_quote 168u متن داخل نقل‌قول مانند "abc"
0.0 fish_color_redirection 168u تغییرمسیرهای ورودی/خروجی مانند >/dev/null
0.0 fish_color_end 168u جداکننده‌های فرایند مانند ; و &
0.0 fish_color_error 168u خطاهای نحوی
0.0 fish_color_param 168u پارامترهای معمولی دستور
0.0 fish_color_valid_path 168u پارامترها و مقصدهای تغییرمسیر که نام فایل هستند (در صورتی که فایل موجود باشد)
0.0 fish_color_option 168u گزینه‌هایی که با "-" شروع می‌شوند، تا نخستین پارامتر "--"
0.0 fish_color_comment 168u توضیحات مانند '# important'
0.0 fish_color_selection 168u متن انتخاب‌شده در حالت دیداری vi
0.0 fish_color_operator 168u عملگرهای بسط پارامتر مانند * و ~
0.0 fish_color_escape 168u نویسه‌های گریز مانند \n و \x70
0.0 fish_color_autosuggestion 168u پیشنهادهای خودکار (بخش پیشنهادی ادامه‌دار یک دستور)
0.0 fish_color_cwd 168u دایرکتوری کاری فعلی در اعلان پیش‌فرض
0.0 fish_color_cwd_root 168u دایرکتوری کاری فعلی در اعلان پیش‌فرض برای کاربر ریشه
0.0 fish_color_user 168u نام کاربری در اعلان پیش‌فرض
0.0 fish_color_host 168u نام میزبان در اعلان پیش‌فرض
0.0 fish_color_host_remote 168u نام میزبان در اعلان پیش‌فرض برای نشست‌های از راه دور (مانند ssh)
0.0 fish_color_status 168u کد خروج غیرصفر آخرین دستور در اعلان پیش‌فرض
0.0 fish_color_cancel 168u نشانگر '^C' در یک دستور لغوشده
0.0 fish_color_search_match 168u تطابق‌های جستجوی تاریخچه و موارد انتخاب‌شده در پیجر (فقط پس‌زمینه)
0.0 fish_color_history_current 168u موقعیت فعلی در تاریخچه برای دستوراتی مانند dirh و cdh

اگر متغیری تنظیم نشده باشد یا پس از کسر گزینه‌های --theme=THEME خالی باشد، پوستهٔ fish معمولاً از $fish_color_normal استفاده می‌کند، به استثنای موارد زیر:

  • برای $fish_color_builtin و $fish_color_function، ابتدا $fish_color_command بررسی می‌شود.
  • برای $fish_color_keyword، ابتدا $fish_color_command بررسی می‌شود.
  • برای $fish_color_option، ابتدا $fish_color_param بررسی می‌شود.
  • برای $fish_color_valid_path، اگر رنگی برای آن تعریف نشده باشد و فقط دارای اصلاح‌کننده‌ها (modifiers) باشد، آن اصلاح‌کننده‌ها به رنگی اضافه می‌شوند که در غیر این صورت استفاده می‌شد، مانند $fish_color_param. اما اگر مسیرهای معتبر رنگ داشته باشند، از همان رنگ استفاده شده و اصلاح‌کننده‌های رنگ دیگر نیز به آن اضافه می‌گردند.

پوستهٔ fish گاهی اوقات فهرستی از گزینه‌ها را در یک جدول نمایش می‌دهد که پیجر (pager) نامیده می‌شود.

مثال: برای تنظیم پس‌زمینهٔ هر سطر پیجر، از دستور زیر استفاده کنید:

set fish_pager_color_background --background=white

برای داشتن متن سیاه روی پس‌زمینه‌های یک‌درمیان سفید و خاکستری:

set fish_pager_color_prefix black
set fish_pager_color_completion black
set fish_pager_color_description black
set fish_pager_color_background --background=white
set fish_pager_color_secondary_background --background=brwhite

متغیرهای موثر بر رنگ‌های پیجر:

متغیر مفهوم و کاربرد
0.0 fish_pager_color_progress 168u نوار پیشرفت در گوشه پایین سمت چپ
0.0 fish_pager_color_background 168u رنگ پس‌زمینه یک خط
0.0 fish_pager_color_prefix 168u رشته پیشوند، یعنی رشته‌ای که قرار است تکمیل شود
0.0 fish_pager_color_completion 168u خود مورد تکمیل، یعنی بخش پیشنهادی باقی‌مانده از رشته
0.0 fish_pager_color_description 168u توضیحات مورد تکمیل
0.0 fish_pager_color_selected_background 168u پس‌زمینه مورد تکمیلِ انتخاب‌شده
0.0 fish_pager_color_selected_prefix 168u پیشوند مورد تکمیلِ انتخاب‌شده
0.0 fish_pager_color_selected_completion 168u پسوند مورد تکمیلِ انتخاب‌شده
0.0 fish_pager_color_selected_description 168u توضیحات مورد تکمیلِ انتخاب‌شده
0.0 fish_pager_color_secondary_background 168u پس‌زمینهٔ یک‌درمیان موارد تکمیل انتخاب‌نشده
0.0 fish_pager_color_secondary_prefix 168u پیشوند یک‌درمیان موارد تکمیل انتخاب‌نشده
0.0 fish_pager_color_secondary_completion 168u پسوند یک‌درمیان موارد تکمیل انتخاب‌نشده
0.0 fish_pager_color_secondary_description 168u توضیحات یک‌درمیان موارد تکمیل انتخاب‌نشده

هنگامی که متغیرهای secondary یا selected تنظیم نشده باشند یا خالی باشند، متغیرهای عادی استفاده می‌شوند، به استثنای $fish_pager_color_selected_background که ابتدا رنگ پس‌زمینهٔ $fish_color_search_match امتحان می‌شود.

برای جلوگیری از تایپ غیرضروری، دستوری که مکرراً اجرا می‌شود مانند git checkout را می‌توان با استفاده از دستور abbr <> به gco خلاصه کرد.

abbr -a gco git checkout

پس از وارد کردن gco و فشردن کلید space (فاصله) یا enter، عبارت gco در جایگاه دستور در خط فرمان به git checkout تبدیل می‌شود. اگر گاهی می‌خواهید دقیقاً از عبارت gco استفاده کنید، از کلیدهای ترکیبی ctrl-space استفاده کنید [1].

مخفف‌ها بسیار قدرتمندتر از جایگزینی سادهٔ رشته‌های متنی هستند. برای نمونه، می‌توانید بالا رفتن در چند سطح دایرکتوری را با این قطعه کد آسان‌تر کنید:

function multicd
    echo cd (string repeat -n (math (string length -- $argv[1]) - 1) ../)
end
abbr --add dotdot --regex '^\.\.+$' --function multicd

اکنون، .. به cd ../، عبارت ... به cd ../../ و عبارت .... به cd ../../../ بسط می‌یابد.

مزیت مخفف‌ها نسبت به نام‌های مستعار (aliases) در این است که می‌توانید دستور واقعی را قبل از اجرا ببینید، به آن چیزی بیفزایید یا آن را تغییر دهید و دستور واقعی در تاریخچه ثبت خواهد شد.

[1]
هر کلید میانبری که تابع پیوند expand-abbr یا execute <> را فراخوانی کند، مخفف‌ها را بسط می‌دهد. به‌طور پیش‌فرض کلید ترکیبی ctrl-space فقط برای درج یک نویسه فاصله تعریف شده است.

هنگامی که نوبت به fish برسد تا ورودی کاربر را دریافت کند (مانند پس از شروع پوسته یا اتمام یک دستور)، یک اعلان (prompt) نمایش می‌دهد. معمولاً این اعلان شبیه به مورد زیر است:

you@hostname ~>

این اعلان با اجرای توابع fish_prompt <> و fish_right_prompt <> تعیین می‌شود.

خروجی تابع اول در سمت چپ و خروجی تابع دوم در سمت راست ترمینال نمایش داده می‌شود. برای حالت vi، خروجی تابع fish_mode_prompt <> به ابتدای سمت چپ اضافه خواهد شد.

اگر متغیر fish_transient_prompt <#envvar-fish_transient_prompt> روی 1 تنظیم شده باشد، پوستهٔ fish پیش از اجرای خط فرمان، اعلان را با آرگومان --final-rendering بازطراحی می‌کند که به شما امکان می‌دهد آن را قبل از ارسال به تاریخچه اسکرول ترمینال تغییر دهید.

پوستهٔ fish همراه با چندین اعلان پیش‌فرض عرضه می‌شود که می‌توانید آن‌ها را با دستور fish_config <> مشاهده کنید. اگر تنها دستور fish_config را اجرا کنید، یک رابط کاربری وب [2] باز می‌شود که اعلان‌ها را به شما نمایش می‌دهد و می‌توانید اعلان دلخواه خود را انتخاب کنید. دستور fish_config prompt show اعلان‌ها را مستقیماً درون ترمینال شما نشان می‌دهد.

برای مثال، fish_config prompt choose disco به‌طور موقت اعلان "disco" را انتخاب می‌کند. اگر آن را پسندیدید و تصمیم گرفتید حفظش کنید، دستور fish_config prompt save را اجرا کنید.

همچنین می‌توانید خودتان این توابع را تغییر دهید؛ کافی است دستور funced fish_prompt را اجرا کرده و پس از رسیدن به نتیجهٔ مطلوب، funcsave fish_prompt را برای ذخیره اجرا کنید (یا fish_right_prompt در صورتی که می‌خواهید آن را تغییر دهید).

[2]
رابط وب کاملاً به‌صورت محلی روی رایانه شما اجرا می‌شود و نیازمند نصب بودن پایتون است.

هنگامی که fish به‌صورت تعاملی راه‌اندازی می‌شود، تلاش می‌کند تابع fish_greeting <> را اجرا کند. تابع پیش‌فرض fish_greeting پیامی ساده چاپ می‌کند. می‌توانید متن آن را با تغییر متغیر $fish_greeting دگرگون کنید؛ برای نمونه با استفاده از یک متغیر سراسری (universal variable) <#variables-universal>:

set -U fish_greeting

یا می‌توانید آن را به‌صورت عمومی (global) <#variables-scope> در فایل config.fish <#configuration> تنظیم کنید:

set -g fish_greeting 'Hey, stranger!'

یا می‌توانید با تغییر تابع، رفتار آن را اسکریپت‌نویسی کنید:

function fish_greeting
    random choice "Hello!" "Hi" "G'day" "Howdy"
end

این کد را در config.fish یا یک فایل تابع <#syntax-function-autoloading> ذخیره کنید. همچنین می‌توانید از funced <> و funcsave <> برای ویرایش آسان آن استفاده نمایید.

بیشتر ترمینال‌ها امکان تنظیم متن نمایش‌یافته در نوار عنوان پنجره ترمینال را فراهم می‌کنند. پوستهٔ fish این کار را با اجرای تابع fish_title <> انجام می‌دهد. این تابع قبل و بعد از اجرای یک دستور اجرا شده و خروجی آن به عنوان پیام نوار عنوان استفاده می‌شود.

دستور توکار status current-command <> همیشه نام کاری را که قرار است به پیش‌زمینه بیاید برمی‌گرداند (یا fish در صورتی که کنترل در حال بازگشت به پوسته باشد) هنگامی که تابع fish_title <> فراخوانی شود. آرگومان نخست شامل آخرین دستور پیش‌زمینهٔ اجراشده به عنوان یک رشته خواهد بود.

عنوان پیش‌فرض در صورت اتصال از طریق ssh نام میزبان، دستور در حال اجرای فعلی (مگر اینکه خود fish باشد) و دایرکتوری کاری فعلی را نشان می‌دهد. تمامی این موارد کوتاه می‌شوند تا تب ترمینال بیش از حد عریض نشود.

مثال‌ها:

برای نمایش آخرین دستور و دایرکتوری کاری در عنوان پنجره:

function fish_title
    # `prompt_pwd` عنوان را کوتاه می‌کند. این به جلوگیری از عریض شدن بیش از حد تب‌ها کمک می‌کند.
    echo $argv[1] (prompt_pwd)
    pwd
end

ویرایشگر fish دارای قابلیت‌های کپی و چسباندن، تاریخچه با امکان جستجو و عملکردهای ویرایشی فراوانی است که می‌توان آن‌ها را به میانبرهای صفحه‌کلید اختصاص داد.

همانند bash و سایر پوسته‌ها، fish شامل دو مجموعه کلید میانبر است: یکی الهام‌گرفته از ویرایشگر متن Emacs، و دیگری برگرفته از ویرایشگر متن vi. حالت ویرایش پیش‌فرض Emacs است. می‌توانید با اجرای fish_vi_key_bindings <> به حالت vi تغییر حالت دهید و با fish_default_key_bindings <> بازگردید. همچنین می‌توانید با ایجاد یک تابع و تنظیم نام آن در متغیر fish_key_bindings میانبرهای اختصاصی خود را تعریف کنید. برای نمونه:

function fish_hybrid_key_bindings --description \
"Vi-style bindings that inherit emacs-style bindings in all modes"
    for mode in default insert visual
        fish_default_key_bindings -M $mode
    end
    fish_vi_key_bindings --no-erase
end
set -g fish_key_bindings fish_hybrid_key_bindings

اگرچه کلیدهای میانبر ارائه‌شده در fish بسیاری از میانبرهای محبوب ویرایشگرهای متن مربوطه را شامل می‌شوند، اما پیاده‌سازی کامل آن‌ها نیستند. در صورتی که به تمامی قابلیت‌های ویرایشگر خود نیاز داشته باشید، fish شامل میانبری برای باز کردن خط فرمان جاری در ویرایشگر ترجیحی شما است (به‌طور پیش‌فرض alt-e).

برخی میانبرها بین حالت‌های Emacs و vi مشترک هستند، زیرا یا مربوط به ویرایش متن نیستند، یا رفتار vi/Vim برای یک کلید خاص در محیط پوسته معنا پیدا نمی‌کند.

  • کلید tab نشانهٔ فعلی را تکمیل می‌کند. shift-tab نشانهٔ فعلی را تکمیل کرده و حالت جستجوی پیجر را باز می‌کند. کلید tab همان عملکرد ctrl-i را دارد.
  • کلیدهای جهت‌نمای left (←) و right (→) مکان‌نما را یک نویسه به چپ یا راست حرکت می‌دهند. اگر مکان‌نما در انتهای خط باشد و پیشنهاد خودکار در دسترس باشد، کلید right (→) پیشنهاد را می‌پذیرد.
  • کلید enter خط فرمان فعلی را اجرا می‌کند، یا در صورتی که دستور هنوز کامل نشده باشد (مثلاً یک ) یا end وجود نداشته باشد)، یک خط جدید درج می‌کند.
  • کلید ترکیبی alt-enter یک خط جدید در موقعیت مکان‌نما درج می‌کند. این برای افزودن خط به فرمانی که قبلاً کامل شده، کاربرد دارد.
  • کلیدهای ترکیبی alt-left (←) و alt-right (→) مکان‌نما را یک کلمه به چپ یا راست حرکت می‌دهند. اگر خط فرمان خالی باشد، در تاریخچه دایرکتوری‌ها به جلو/عقب حرکت می‌کنند. اگر مکان‌نما در انتهای خط باشد و پیشنهاد خودکار وجود داشته باشد، alt-right (→) (یا alt-f) کلمه اول پیشنهاد را می‌پذیرد.
  • کلیدهای ترکیبی ctrl-left (←) و ctrl-right (→) مکان‌نما را یک نشانه به چپ یا راست می‌برند. این کلیدها یک نشانه از پیشنهاد خودکار را می‌پذیرند (بخشی که روی آن حرکت می‌کنند).
  • کلیدهای ترکیبی shift-left (←) و shift-right (→) مکان‌نما را یک کلمه بدون توقف روی علائم نگارشی به چپ یا راست می‌برند. این کلیدها یک کلمهٔ بزرگ از پیشنهاد خودکار را می‌پذیرند.
  • کلیدهای up (↑) و down (↓) (یا ctrl-p و ctrl-n برای علاقه‌مندان به ایمکس) تاریخچه دستورات را برای دستور قبلی/بعدی حاوی رشته مشخص‌شده در خط فرمان قبل از شروع جستجو جستجو می‌کنند. اگر خط فرمان هنگام شروع جستجو خالی باشد، تمام دستورات مطابقت دارند. برای اطلاعات بیشتر به بخش تاریخچه مراجعه کنید.
  • کلیدهای alt-up (↑) و alt-down (↓) در تاریخچه دستورات به دنبال نشانهٔ قبلی/بعدی حاوی نشانهٔ زیر مکان‌نما می‌گردند. اگر خط فرمان روی نشانه‌ای نباشد، تمامی نشانه‌ها مطابقت دارند.
  • کلید ترکیبی ctrl-c هر فرمانی را که در حال اجراست قطع کرده یا خاتمه می‌دهد (SIGINT).
  • کلید ترکیبی ctrl-d یک نویسه در سمت راست مکان‌نما را حذف می‌کند. اگر خط فرمان خالی باشد، فشردن ctrl-d از fish خارج می‌شود.
  • کلید ترکیبی ctrl-u محتوا را از ابتدای خط تا مکان‌نما حذف کرده و به حلقه حذفیات (killring) منتقل می‌کند.
  • کلید ترکیبی ctrl-l هر متنی بالای اعلان را به تاریخچه پیمایش (scrollback) ترمینال فرستاده، سپس صفحه را پاکسازی و مجدداً ترسیم می‌کند.
  • کلید ترکیبی ctrl-w بخش قبلی مسیر (هر چیز تا نویسه قبلی "/"، ":" یا "@") را حذف کرده و به حلقه حذفیات منتقل می‌کند.
  • کلید ترکیبی ctrl-x بافر فعلی را در کلیپ‌بورد سیستم کپی می‌کند و ctrl-v محتوای کلیپ‌بورد را درج می‌کند (توابع fish_clipboard_copy <> و fish_clipboard_paste <> را ببینید).
  • کلید ترکیبی alt-d کلمه بعدی را به حلقه حذفیات (Kill Ring) منتقل می‌کند.
  • کلید ترکیبی ctrl-delete کلمه بعدی (یا آرگومان بعدی در macOS) را به حلقه حذفیات منتقل می‌کند.
  • اگر خط فرمان خالی باشد، کلید ترکیبی alt-d تاریخچه دایرکتوری را فهرست می‌کند.
  • کلید ترکیبی alt-delete آرگومان بعدی (یا کلمه در macOS) را به حلقه حذفیات منتقل می‌کند.
  • کلید ترکیبی shift-delete مورد جاری تاریخچه یا پیشنهاد خودکار را از تاریخچه دستورات حذف می‌کند.
  • کلید ترکیبی alt-h (یا f1) در صورت وجود، صفحه راهنمای دستور جاری را نمایش می‌دهد.
  • کلید ترکیبی alt-l محتویات دایرکتوری جاری را فهرست می‌کند، مگر اینکه مکان‌نما روی آرگومان دایرکتوری باشد که در این صورت محتویات آن دایرکتوری نمایش داده می‌شود.
  • کلید ترکیبی alt-o فایل زیر مکان‌نما را در یک پیجر باز می‌کند. اگر مکان‌نما در جایگاه دستور باشد و دستور یک اسکریپت باشد، در عوض آن اسکریپت را در ویرایشگر شما باز می‌کند. ویرایشگر از نخستین متغیر در دسترس بین $VISUAL یا $EDITOR انتخاب می‌شود.
  • کلید ترکیبی alt-p رشته &| less; را به انتهای کارِ زیر مکان‌نما اضافه می‌کند که باعث صفحه‌بندی خروجی دستور می‌شود. اگر متغیر PAGER را تنظیم کرده باشید، مقدار آن به جای less استفاده خواهد شد.
  • کلید ترکیبی alt-w توصیف کوتاهی از دستور زیر مکان‌نما چاپ می‌کند.
  • کلید ترکیبی alt-e خط فرمان جاری را در یک ویرایشگر خارجی ویرایش می‌کند. ویرایشگر از اولین متغیر معتبر بین $VISUAL یا $EDITOR انتخاب می‌شود.
  • کلید ترکیبی alt-v همان کارکرد alt-e را دارد.
  • کلید ترکیبی alt-s عبارت sudo را به ابتدای خط فرمان فعلی اضافه می‌کند. اگر خط فرمان خالی باشد، sudo به ابتدای آخرین خط فرمان اضافه می‌شود. در صورتی که sudo نصب نباشد، دستورات مشابه مانند doas، please و run0 امتحان می‌شوند.
  • کلید ترکیبی ctrl-space یک فاصله بدون بسط دادن مخفف درج می‌کند. در حالت vi، این کلید فقط به حالت درج اعمال می‌شود.

برای فعال‌سازی حالت Emacs، از دستور fish_default_key_bindings <> استفاده کنید. این حالت پیش‌فرض نیز هست.

  • کلید home یا ctrl-a مکان‌نما را به ابتدای سطر منتقل می‌کند.
  • کلید end یا ctrl-e مکان‌نما را به انتهای سطر می‌برد. اگر مکان‌نما در انتهای سطر باشد و پیشنهاد خودکار در دسترس باشد، end یا ctrl-e پیشنهاد را می‌پذیرد.
  • کلیدهای ctrl-b و ctrl-f مکان‌نما را یک نویسه به چپ یا راست حرکت می‌دهند یا درست مانند کلیدهای جهت‌نمای left (←) و right (→) پیشنهاد خودکار را می‌پذیرند (که آن‌ها نیز در دسترس هستند).
  • کلیدهای alt-b و alt-f مکان‌نما را یک کلمه به چپ یا راست می‌برند، یا یک کلمه از پیشنهاد خودکار را می‌پذیرند. اگر خط فرمان خالی باشد، در تاریخچه دایرکتوری به جلو/عقب حرکت می‌کنند.
  • کلیدهای ctrl-n و ctrl-p مکان‌نما را به بالا/پایین یا در طول تاریخچه حرکت می‌دهند، همانند کلیدهای میانبر فلش بالا و پایین.
  • کلیدهای delete یا backspace یا ctrl-h به ترتیب یک نویسه رو به جلو یا عقب را حذف می‌کنند.
  • کلید ترکیبی alt-backspace یک کلمه به سمت عقب و ctrl-backspace یک آرگومان به سمت عقب را حذف می‌کند.
  • کلید ترکیبی alt-< به ابتدای خط فرمان و alt-> به انتهای آن حرکت می‌کند.
  • کلید ترکیبی ctrl-k از موقعیت مکان‌نما تا انتهای سطر را حذف کرده و به حلقه حذفیات (Kill Ring) منتقل می‌کند.
  • کلیدهای escape و ctrl-g عملیات جاری را لغو می‌کنند. بلافاصله پس از یک تکمیل بدون ابهام، این کار آن تکمیل را لغو (undo) می‌کند.
  • کلید ترکیبی alt-c حرف اول کلمه جاری را بزرگ (capitalize) می‌کند.
  • کلید ترکیبی alt-u تمام حروف کلمه جاری را به حروف بزرگ تبدیل می‌کند.
  • کلید ترکیبی ctrl-t جای دو نویسه آخر را با یکدیگر عوض می‌کند.
  • کلید ترکیبی alt-t جای دو کلمه آخر را با یکدیگر عوض می‌کند.
  • کلیدهای ترکیبی ctrl-z یا ctrl-_ (در برخی پایانه‌ها ctrl-/) آخرین ویرایش انجام‌شده روی سطر را واگردانی (undo) می‌کنند.
  • کلیدهای ترکیبی alt-/ یا ctrl-shift-z آخرین واگردانی را بازگردانی (redo) می‌کنند.
  • کلید ترکیبی ctrl-r تاریخچه را در یک پیجر باز می‌کند. این کار موارد تاریخچه مطابق با جستجو را چند مورد در هر بار نشان می‌دهد. فشردن مجدد ctrl-r موارد قدیمی‌تر را جستجو می‌کند، و فشردن ctrl-s به موارد جدیدتر می‌رود. نوار جستجو همیشه در حالت انتخاب خواهد بود.

می‌توانید این کلیدهای میانبر را با استفاده از دستور توکار bind <> تغییر دهید.

حالت vi امکان استفاده از دستورات شبیه به vi را در اعلان خط فرمان فراهم می‌کند. در ابتدا، حالت درج (insert mode) فعال است. فشردن کلید escape وارد حالت فرمان (command mode) می‌شود. دستورات موجود در حالت‌های فرمان، درج و دیداری در ادامه شرح داده شده‌اند. حالت vi چندین میانبر مشترک با حالت Emacs دارد.

برای فعال‌سازی حالت vi، از دستور fish_vi_key_bindings <> استفاده کنید. همچنین امکان افزودن تمام میانبرهای حالت Emacs به حالت vi با استفاده از کدی شبیه به زیر وجود دارد:

function fish_user_key_bindings
    # این دستور را یک بار برای هر حالتی که میانبرهای ایمکس باید در آن استفاده شوند اجرا کنید
    fish_default_key_bindings -M insert
    # سپس میانبرهای vi را اجرا کنید تا در صورت وجود تعارض، اولویت داشته باشند.
    # بدون سوییچ --no-erase، تابع fish_vi_key_bindings تمام میانبرها را بازنشانی می‌کند.
    # آرگومان حالت اولیه را مشخص می‌کند (insert، "default" یا visual).
    fish_vi_key_bindings --no-erase insert
end

در حالت vi، تابع fish_mode_prompt <> یک نشانگر وضعیت حالت را در سمت چپ اعلان نمایش می‌دهد. برای غیرفعال کردن این ویژگی، آن را با یک تابع خالی جایگزین (override) کنید. برای نمایش حالت در جای دیگر (مانند سمت راست اعلان)، از خروجی تابع fish_default_mode_prompt استفاده کنید.

هنگامی که یک میانبر حالت را تغییر می‌دهد، اعلان حالت را (در صورت وجود) مجدداً ترسیم می‌کند، و بقیه اعلان را فقط در صورتی که اعلان حالت وجود نداشته باشد بازطراحی خواهد کرد. بنابراین اگر خواهان نشانگر حالت در fish_prompt خود هستید، باید fish_mode_prompt را حذف کنید؛ مثلاً با افزودن یک فایل خالی در مسیر ~/.config/fish/functions/fish_mode_prompt.fish. (میانبرهایی که حالت را تغییر می‌دهند باید تابع پیوند repaint-mode را فراخوانی کنند، به bind <> مراجعه نمایید).

تابع fish_vi_cursor برای تغییر شکل مکان‌نما متناسب با حالت فعال در ترمینال‌های پشتیبانی‌شده استفاده می‌شود. قطعه‌کد زیر می‌تواند برای پیکربندی دستی مکان‌نما پس از فعال‌سازی حالت vi استفاده شود:

# شبیه‌سازی رفتار شکل مکان‌نمای vim
# تنظیم مکان‌نمای حالت عادی و دیداری به شکل مکعب (block)
set fish_cursor_default block
# تنظیم مکان‌نمای حالت درج به شکل خط (line)
set fish_cursor_insert line
# تنظیم مکان‌نمای حالت جایگزینی به شکل خط زیرین (underscore)
set fish_cursor_replace_one underscore
set fish_cursor_replace underscore
# تنظیم مکان‌نمای خارجی به شکل خط. مکان‌نمای خارجی هنگام شروع دستور ظاهر می‌شود.
# در صورت عدم تعیین fish_cursor_external، شکل مکان‌نما مقدار fish_cursor_default را می‌گیرد.
set fish_cursor_external line
# متغیر زیر می‌تواند برای پیکربندی شکل مکان‌نما در حالت دیداری استفاده شود،
# اما به دلیل مقدار fish_cursor_default در اینجا افزونه و اختیاری است
set fish_cursor_visual block

علاوه بر این، می‌توان عبارت blink را پس از هر یک از پارامترهای شکل مکان‌نما اضافه کرد تا یک مکان‌نمای چشمک‌زن با شکل تعیین‌شده تنظیم شود.

پوستهٔ fish شکل‌های "block" (مکعب)، "line" (خط) و "underscore" (خط زیرین) را می‌شناسد و سایر مقادیر نادیده گرفته می‌شوند.

اگر پس از تنظیم متغیرهای فوق شکل مکان‌نما تغییر نکرد، احتمالاً شبیه‌ساز ترمینال شما از قابلیت‌های لازم برای انجام این کار پشتیبانی نمی‌کند.

حالت فرمان به عنوان حالت عادی (normal mode) نیز شناخته می‌شود.

  • کلید h مکان‌نما را به سمت چپ حرکت می‌دهد.
  • کلید l مکان‌نما را به سمت راست حرکت می‌دهد.
  • کلیدهای k و j تاریخچه دستورات را برای دستور قبلی/بعدی حاوی رشته مشخص‌شده در خط فرمان جستجو می‌کنند. اگر خط فرمان خالی باشد، تمام دستورات مطابقت دارند. در دستورات چندخطی، به ترتیب مکان‌نما را به بالا و پایین می‌برند.
  • کلید i در موقعیت فعلی مکان‌نما وارد حالت درج می‌شود.
  • کلید I در ابتدای خط وارد حالت درج می‌شود.
  • کلید v در موقعیت فعلی مکان‌نما وارد حالت دیداری می‌شود.
  • کلید a پس از موقعیت فعلی مکان‌نما وارد حالت درج می‌شود.
  • کلید A در انتهای سطر وارد حالت درج می‌شود.
  • کلید o یک خط جدید زیر خط فعلی درج کرده و وارد حالت درج می‌شود.
  • کلید O (حرف بزرگ) یک خط جدید بالای خط فعلی درج کرده و وارد حالت درج می‌شود.
  • کلید 0 (صفر) مکان‌نما را به ابتدای خط منتقل می‌کند (در حالت فرمان باقی می‌ماند).
  • کلید d,d سطر جاری را حذف کرده و به حلقه حذفیات (Kill Ring) منتقل می‌کند.
  • کلید D متن پس از موقعیت مکان‌نما را حذف کرده و به حلقه حذفیات منتقل می‌کند.
  • کلید p متن را از حلقه حذفیات می‌چسباند.
  • کلید u آخرین ویرایش خط فرمان را واگردانی (undo) می‌کند.
  • کلید ترکیبی ctrl-r آخرین ویرایش واگردانی‌شده را بازگردانی (redo) می‌کند.
  • کلیدهای [ و ] در تاریخچه به دنبال نشانهٔ قبلی/بعدی حاوی نشانهٔ زیر مکان‌نما می‌گردند.
  • کلید / تاریخچه را در یک پیجر باز می‌کند. با فشردن مجدد به موارد قدیمی‌تر رفته و با ctrl-s به موارد جدیدتر هدایت می‌شوید.
  • کلید backspace مکان‌نما را به چپ می‌برد.
  • کلیدهای g,g / G مکان‌نما را به ترتیب به ابتدا یا انتهای خط فرمان منتقل می‌کنند.
  • کلید ~ بزرگی و کوچکی حرف را معکوس کرده و به نویسه بعدی می‌رود.
  • کلید g,u حروف را تا انتهای کلمه به حروف کوچک تبدیل می‌کند.
  • کلید g,U حروف را تا انتهای کلمه به حروف بزرگ تبدیل می‌کند.
  • کلید :,q از fish خارج می‌شود.

  • کلید escape وارد حالت فرمان می‌شود.
  • کلید backspace یک نویسه در سمت چپ را حذف می‌کند.
  • کلید ترکیبی ctrl-n پیشنهاد خودکار را می‌پذیرد.

  • کلیدهای left (``←`) و right`(``→`) انتخاب متن را یک نویسه به عقب یا جلو گسترش می‌دهند.
  • کلید h مکان‌نما را به چپ می‌برد.
  • کلید l مکان‌نما را به راست می‌برد.
  • کلید k مکان‌نما را به بالا می‌برد.
  • کلید j مکان‌نما را به پایین می‌برد.
  • کلیدهای b و w انتخاب متن را یک کلمه به عقب یا جلو گسترش می‌دهند.
  • کلیدهای d و x متن انتخاب‌شده را به حلقه حذفیات (Kill Ring) منتقل کرده و وارد حالت فرمان می‌شوند.
  • کلیدهای escape و ctrl-c وارد حالت فرمان می‌شوند.
  • کلیدهای c و s بخش انتخاب‌شده را حذف کرده و به حالت درج می‌روند.
  • کلید X کل سطر را به حلقه حذفیات منتقل کرده و وارد حالت فرمان می‌شود.
  • کلید y بخش انتخاب‌شده را در حلقه حذفیات کپی کرده و وارد حالت فرمان می‌شود.
  • کلید ~ وضعیت بزرگی/کوچکی حروف بخش انتخاب‌شده را معکوس کرده و وارد حالت فرمان می‌شود.
  • کلید g,u بخش انتخاب‌شده را به حروف کوچک تبدیل کرده و وارد حالت فرمان می‌شود.
  • کلید g,U بخش انتخاب‌شده را به حروف بزرگ تبدیل کرده و وارد حالت فرمان می‌شود.
  • کلید ",*,y بخش انتخاب‌شده را در کلیپ‌بورد سیستم کپی کرده و وارد حالت فرمان می‌شود.

علاوه بر میانبرهای استانداردی که در اینجا فهرست شده‌اند، می‌توانید میانبرهای سفارشی خود را نیز با bind <> تعریف کنید:

# عبارت ``^C`` و یک اعلان جدید چاپ می‌کند
bind ctrl-c cancel-commandline

دستورات bind را درون config.fish <#configuration> یا تابعی به نام fish_user_key_bindings قرار دهید.

اگر نظرتان درباره یک کلید میانبر تغییر کرد و خواستید به حالت پیش‌فرض fish برگردید، می‌توانید آن را حذف (پاک) کنید:

bind --erase ctrl-c

پوستهٔ fish میانبرهای از‌پیش‌تعیین‌شدهٔ خود را به خاطر دارد و بنابراین آن میانبر مجدداً اعمال خواهد شد. این کار شما را از به‌خاطر سپردن مقدار قبلی و افزودن مجدد آن بی‌نیاز می‌کند.

اگر از میانبرهای vi استفاده می‌کنید، توجه داشته باشید که bind به‌طور پیش‌فرض کلیدها را در حالت فرمان پیوند می‌زند. برای اختصاص میانبر در حالت درج:

bind --mode insert ctrl-c 'commandline -r ""'

برای پی بردن به نام یک کلید، می‌توانید از دستور fish_key_reader <> استفاده کنید.

> fish_key_reader # فشردن Alt + کلید جهت‌نمای راست
Press a key:
bind alt-right 'do something'

توجه داشته باشید که شیوه سنتی کدگذاری کلیدها توسط ترمینال و ارسال آن‌ها به برنامه (در اینجا fish) باعث می‌شود بسیاری از کلیدهای ترکیبی غیرقابل‌تشخیص یا غیرقابل‌اختصاص باشند. در کدگذاری معمول، کلید ctrl-i دقیقاً معادل کلید تب است، و در صورت فشردن هم‌زمان کلید ctrl، کلید shift قابل تشخیص نیست.

طرح‌های کدگذاری پیشرفته‌تری وجود دارند و fish تلاش می‌کند به ترمینال دستور دهد آن‌ها را فعال کند، اما هنوز ترمینال‌های زیادی از آن‌ها پشتیبانی نمی‌کنند. هنگامی که fish_key_reader برای دو کلید متفاوت توالی یکسانی چاپ می‌کند، به این دلیل است که ترمینال شما برای هر دوی آن‌ها توالی یکسانی می‌فرستد و کاری از دست fish در این باره برنمی‌آید. امید است که این طرح‌ها فراگیرتر شده و ورود داده‌ها انعطاف‌پذیرتر گردد.

در طرح قدیمی، کلید escape در ترمینال معادل alt است. برای تمایز میان فشردن کلید escape و سپس یک کلید دیگر، در مقابل فشردن کلید ترکیبی alt با آن کلید (یا یک توالی گریز که کلید می‌فرستد)، پوستهٔ fish پس از مشاهده کاراکتر escape مدت زمان معینی منتظر می‌ماند. این زمان از طریق متغیر fish_escape_delay_ms <#envvar-fish_escape_delay_ms> قابل تنظیم است.

اگر می‌خواهید بتوانید ابتدا کلید escape و سپس یک نویسه را فشار دهید و پوسته آن را معادل alt+آن نویسه بشمارد، مقدار آن را افزایش دهید؛ برای نمونه:

set -g fish_escape_delay_ms 100

مشابهاً، برای ابهام‌زدایی از سایر کلیدهای فشرده‌شده‌ای که در آن‌ها یک زیرتوالی و یک توالی طولانی‌تر را تعریف کرده‌اید، fish دارای متغیر fish_sequence_key_delay_ms است <#envvar-fish_sequence_key_delay_ms>:

# این دستور توالی j,k را برای انتقال به حالت عادی در حالت vi اختصاص می‌دهد.
# اگر آن را به همین شکل رها کنید، هر بار که "j" را فشار دهید،
# پوسته منتظر فشردن "k" یا کلید دیگر برای رفع ابهام می‌ماند
bind -M insert -m default j,k cancel repaint-mode
# پس از تنظیم این متغیر، پوسته تنها ۲۰۰ میلی‌ثانیه برای "k" منتظر می‌ماند،
# یا تصمیم می‌گیرد با "j" به عنوان یک توالی جداگانه رفتار کرده و آن را درج کند.
set -g fish_sequence_key_delay_ms 200

پوستهٔ fish از یک حلقه حذفیات (kill ring) به سبک ایمکس برای قابلیت کپی و چسباندن بهره می‌برد. برای نمونه، از کلید ترکیبی ctrl-k (kill-line) برای برش از موقعیت فعلی مکان‌نما تا انتهای خط استفاده کنید. رشته‌ای که برش داده می‌شود به فهرستی از موارد حذف‌شده وارد می‌گردد که حلقه حذفیات (kill ring) نام دارد. برای چسباندن آخرین مقدار از حلقه حذفیات (که ایمکس آن را "yanking" می‌نامد) از کلید ترکیبی ctrl-y (تابع ورودی yank) استفاده کنید. پس از چسباندن، با استفاده از alt-y (yank-pop) می‌توانید میان موارد حذفی قبلی بچرخید.

کپی و چسباندن از خارج از محیط پوسته نیز هم از طریق میانبرهای ctrl-x / ctrl-v (توابع fish_clipboard_copy و fish_clipboard_paste [3]) و هم از طریق قابلیت چسباندن ترمینال پشتیبانی می‌شود؛ برای این منظور fish قابلیت "Bracketed Paste Mode" را فعال می‌کند تا بتواند متن چسبانده‌شده را از متن واردشده به صورت دستی تمیز دهد. علاوه بر این، هنگام چسباندن متن در میان تک‌کوتیشن‌ها، علامت‌های تک‌کوتیشن و بک‌اسلش‌های درون متن چسبانده‌شده به‌طور خودکار اسکیپ (گریزدهی) می‌شوند تا پس از بستن کوتیشن بتوان از نتیجه به عنوان یک نشانه واحد استفاده کرد. موارد حلقه حذفیات در متغیر fish_killring ذخیره می‌شوند.

دستورات begin-selection و end-selection (که به‌طور پیش‌فرض به کلیدی اختصاص داده نشده‌اند؛ در حالت دیداری vi برای انتخاب استفاده می‌شوند) به همراه دستورات حرکت مکان‌نما که انتخاب فعلی را گسترش می‌دهند، انتخاب متن را کنترل می‌کنند. متغیر fish_cursor_selection_mode <#envvar-fish_cursor_selection_mode> می‌تواند برای پیکربندی این مورد استفاده شود که آیا نویسهٔ زیر مکان‌نما نیز باید شامل انتخاب شود (inclusive) یا خیر (exclusive). پیش‌فرض exclusive است که با هر شکل مکان‌نمایی به خوبی کار می‌کند. برای حالت vi، به‌ویژه در شکل مکان‌نمای block یا underscore ممکن است ترجیح دهید از inclusive استفاده کنید.

[3]
این قابلیت‌ها به ابزارهای خارجی متکی هستند. در حال حاضر ابزارهای xsel، xclip، wl-copy/wl-paste و pbcopy/pbpaste پشتیبانی می‌شوند.

ویرایشگر خط فرمان fish می‌تواند برای کار روی دستوراتی که چند خط طول دارند استفاده شود. سه روش برای ایجاد فرمانی که بیش از یک خط گسترش می‌یابد وجود دارد:

  • فشردن کلید enter هنگامی که یک بلوک از دستورات هنوز بسته نشده است؛ مانند زمانی که یک یا چند دستور بلوکی مثل for، begin یا if هنوز دستور end <> متناظر خود را دریافت نکرده‌اند.
  • فشردن کلید ترکیبی alt-enter به جای فشردن کلید enter.
  • درج نویسهٔ بک‌اسلش (\) پیش از فشردن کلید enter جهت گریزدهی خط جدید.

ویرایشگر خط فرمان fish در هر دو حالت تک‌خطی و چندخطی کاملاً یکسان کار می‌کند. برای جابه‌جایی میان خطوط از کلیدهای جهت‌نمای چپ و راست و سایر کلیدهای میانبر مشابه استفاده کنید.

پس از اجرای یک دستور، آن دستور در فهرست تاریخچه ذخیره می‌شود. هرگونه موارد تکراری در تاریخچه به‌طور خودکار حذف می‌شوند. با فشردن کلیدهای جهت‌نمای بالا و پایین، می‌توانید رو به جلو و عقب در تاریخچه جستجو کنید. اگر خط فرمان هنگام شروع جستجو خالی نباشد، فقط دستوراتی نمایش داده می‌شوند که حاوی رشتهٔ واردشده در خط فرمان باشند.

با فشردن کلیدهای ترکیبی alt-up (↑) و alt-down (↓)، جستجوی تاریخچه به گونه‌ای متفاوت اجرا می‌شود: به جای جستجو برای یک خط فرمان کامل، هر خط فرمان به عناصر مجزایی همانند قبل از اجرا تفکیک شده و تاریخچه برای عنصری که با عنصر زیر مکان‌نما مطابقت دارد جستجو می‌شود.

برای جستجوهای پیچیده‌تر، می‌توانید ctrl-r را فشار دهید تا پیجری باز شود که امکان جستجو در تاریخچه را می‌دهد. این پیجر تعداد محدودی از موارد را در یک صفحه نمایش می‌دهد؛ مجدداً کلید ترکیبی ctrl-r [4] را برای رفتن به صفحه بعد و ctrl-s [5] را برای رفتن به صفحه قبل فشار دهید. می‌توانید متن را برای پالایش جستجوی خود تغییر دهید.

جستجوهای تاریخچه به بزرگی و کوچکی حروف حساس نیستند، مگر اینکه عبارت جستجو حاوی حروف بزرگ باشد. با فشردن کلید escape یا pagedown می‌توانید جستجو را برای ویرایش رشته متوقف کنید.

قرار دادن یک نویسهٔ فاصله در ابتدای خط فرمان از ذخیره کل خط در تاریخچه دیسک جلوگیری می‌کند. این دستور تا زمان اجرای دستور بعدی همچنان برای فراخوانی در دسترس خواهد بود، اما روی دیسک ذخیره نمی‌شود. این قابلیت به شما امکان می‌دهد اشتباهات املایی و موارد این‌چنینی را برطرف کنید.

تاریخچه دستورات به‌طور پیش‌فرض در فایل ~/.local/share/fish/fish_history (یا $XDG_DATA_HOME/fish/fish_history در صورت تنظیم آن متغیر) ذخیره می‌شود. با این حال، می‌توانید با تنظیم متغیر محیطی fish_history نام نشست تاریخچه را تغییر دهید (که منجر به ایجاد یک فایل <session>_history می‌شود)؛ هم پیش از آغاز پوسته و هم هنگام اجرای آن.

برای دستکاری‌های بیشتر، دستور history <> را ببینید.

مثال‌ها:

برای جستجوی دستورات قبلی حاوی کلمهٔ 'make'، عبارت make را در کنسول تایپ کرده و کلید جهت‌نمای بالا را فشار دهید.

اگر خط فرمان حاوی عبارت cd m باشد، مکان‌نما را روی نویسهٔ m قرار داده و کلیدهای ترکیبی alt-up (↑) را برای جستجوی کلمات تایپ‌شده پیشین که شامل 'm' هستند، فشار دهید.

[4]
یا هر میانبر دیگری که تابع ورودی history-pager را فعال کند. برای مشاهده فهرست به bind <> مراجعه نمایید.
[5]
یا هر میانبر دیگری که تابع ورودی pager-toggle-search را فعال کند.

پوستهٔ fish دارای یک حالت خصوصی است که در آن تاریخچه دستورات در فایل تاریخچه روی دیسک نوشته نخواهد شد. برای فعال‌سازی آن، یا متغیر $fish_private_mode را روی یک مقدار غیرخالی تنظیم کنید، یا پوسته را با fish --private (یا به اختصار fish -P) اجرا نمایید.

اگر fish را با گزینه -P اجرا کنید، هم تاریخچهٔ گذشته را مخفی می‌کند و هم مانع از نوشتن تاریخچه روی دیسک می‌شود. این برای جلوگیری از افشای اطلاعات شخصی (برای مثال هنگام ضبط صفحه نمایش) یا هنگام کار با اطلاعات حساس بسیار مفید است.

در صورتی که می‌خواهید به تمایل کاربر برای حفظ حریم خصوصی احترام بگذارید و رفتار اسکریپت‌های fish خود را تغییر دهید، می‌توانید متغیر fish_private_mode را بررسی کنید (if test -n "$fish_private_mode" ...).

پیمایش دایرکتوری‌ها معمولاً با دستور cd <> انجام می‌شود، اما fish قابلیت‌های پیشرفته‌ای نیز ارائه می‌دهد.

دایرکتوری کاری فعلی را می‌توان با دستور pwd <> یا متغیر ویژهٔ $PWD <#variables-special> نمایش داد. معمولاً اعلان خط فرمان شما از قبل این کار را انجام می‌دهد.

پوستهٔ fish به‌طور خودکار ردپای دایرکتوری‌هایی را که اخیراً با دستور cd <> بازدید شده‌اند، با ذخیره این تاریخچه در متغیرهای dirprev و dirnext نگه می‌دارد.

چندین دستور برای تعامل با این تاریخچه دایرکتوری‌ها ارائه شده است:

  • دستور dirh <> تاریخچه را چاپ می‌کند
  • دستور cdh <> اعلانی برای پیمایش سریع در تاریخچه نمایش می‌دهد
  • دستور prevd <> در تاریخچه به عقب حرکت می‌کند. این دستور به alt-left (←) متصل است
  • دستور nextd <> در تاریخچه به جلو حرکت می‌کند. این دستور به alt-right (→) متصل است

مجموعه دیگری از دستورات که معمولاً در سایر پوسته‌ها مانند bash نیز در دسترس هستند، به پشتهٔ دایرکتوری‌ها مربوط می‌شوند. مدیریت پشته خودکار نیست و نیازمند فراخوانی مستقیم دستورات زیر است:

  • دستور dirs <> پشته را چاپ می‌کند
  • دستور pushd <> یک دایرکتوری را بالای پشته اضافه می‌کند و آن را به عنوان دایرکتوری کاری فعلی قرار می‌دهد
  • دستور popd <> دایرکتوری بالای پشته را برداشته و دایرکتوری کاری فعلی را تغییر می‌دهد

توسعه‌دهندگان fish-shell

توسعه‌دهندگان fish-shell

September 7, 2026 4.9