تا زمانی که بَش هست، چرا زی‌شل؟

آشنایی با یه ویرایشگرِ خطِ فرمانِ توانا برای بش!

امروزه پوستهٔ پرهوادار و دوست‌داشتنیِ بش دیگه کهنه شده و می‌شه گفت از دیگر رهنوردان یه‌جورایی عقب مونده. اگرچه هنوز بهترین و پرکاربرترین پوسته‌ست و برترین هم‌خوانی رو با استانداردِ پازیکس داره، اما هم‌چنان روشنه که کاستی‌هایی در پیاده‌سازیِ ویژگی‌های نوین داشته و از توانایی‌هایی که اکنون برجسته شدن پشتیبانی نمی‌کنه.

خب این انگیزه‌ای می‌شه برای کاربرهای پی‌گیرِ ویژگی‌های تازه و شیفتهٔ توانایی‌های جذاب‌تر، برای کوچ به پوسته‌های به‌روزتری چون زی‌شل و فیش. چیزهایی همانندِ…

  • خطِ فرمانِ رنگی
  • پیشنهادِ خودکار
  • تکمیلِ پیش‌رفته
  • کلید‌های میان‌بر
  • سرواژه‌ها
  • پرامپتِ راست
  • زمان‌سنج
  • حالتِ ویم
  • و…

اما وقتی خودم هم به‌ناچار، کمابیش به زی‌شل کوچ کرده بودم و با مشکلِ نمایشِ «نیم‌فاصله» سروکله می‌زدم، به چیزی برخوردم که منو برگردوند به همون بشِ عزیزِ خودم! ble.sh یه پروژهٔ خفنه که سراسر با خودِ بش نوشته شده، جایگزینِ خط‌خوانِ پیش‌گزیده می‌شه و بدونِ نیاز به ترکِ بش از همهٔ امکاناتِ یادشده بهره‌مندت می‌کنه.

ble.sh

کندی از ویدئوی‌ایه که گرفتم، نه خود برنامه، نمی‌دونم چرا پس از چند بار ویرایش، این‌جوری کند شد!

نصب

  • خب اگه توزیعتون برپایهٔ آرچ‌لینوکسه، می‌تونین به‌آسونی تازه‌ترین نگارشش رو از مخازنِ کاربرِ آرچ نصب کنین.
paru -S blesh-git
  • چنان‌چه کاربرِ آرچ نیستین (که وای بر من!) هم می‌شه پس از جست‌وجویی اگر ناکام تو مخازنِ توزیعتون، با فرمان‌های زیر دریافتش کنین:
curl -L https://github.com/akinomyoga/ble.sh/releases/download/nightly/ble-nightly.tar.xz | tar xJf -
bash ble-nightly/ble.sh --install ~/.local/share

راه‌اندازی

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

[[ $- == *i* ]] && source /usr/share/blesh/ble.sh --noattach
[[ $- == *i* ]] && source ~/.config/blesh --noattach

[[ ${BLE_VERSION-} ]] && ble-attach

پیکربندی

رسیدیم به بخشِ هیجان‌انگیزِش! بی‌گمان همین حالا هم می‌تونین ازش بهره ببرین و کار باهاش رو آغاز کنین، ولی بد نیست برای بهترین بازدهی، بدونِ درنگ یه دستی به پروندهٔ ~/.config/blesh بکشین.

پرامپتِ راست

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

می‌تونین از پرامپت‌سازِ بش یاری بگیرین و پس از جایگزینیِ خروجیِ اون با ‌PROMT در خط زیر و افزودنش به پروندهٔ پیکربندیِ ble.sh، شما هم توی بش این گزینه رو داشته باشین!

bleopt prompt_rps1='PROMT'

زمان‌سنج

با افزودنِ \q{contrib/elapsed-real} به پرامپتِ راست یا چپ، می‌شه باخبر شین که از زمانِ اجرای فرمانِ پیشین، چقدر زمان سپری شده تا پوسته بهتون پرامپت رو برگردونه. خطِ زیر این گزینه رو روشن می‌کنه:

ble-import contrib/prompt-elapsed

اگرچه خود ble.sh هنگامی که اجرای یه فرمان بیش از اندازه زمان ببره، در پایان خودش مدتِ سپری‌شده رو می‌نویسه!

جست‌جوی آسان‌تر

درست مانندِ زی‌شل، می‌تونین واژهٔ نخست از فرمانی که به دنبالش هستین رو بنویسین و با کلید‌های جهت‌دارِ بالا و پایین، در تاریخ‌چه جست‌وجوش کنین.

bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'

شایسته‌ست بدونین که این دو خط رو توی خودِ .bashrc هم بذارین کار می‌کنه، چراکه این ویژگی برای خودِ بشه!

کلیدِ میان‌بر

همانندِ خطِ زیر می‌شه برای خودتون کلیدِ میان‌بر تعریف کنین. می‌تونین از این جدول برای یادگیریِ کلیدها بهره ببرین!

نشانکلید
Sتبدیل
Cمهار
Mدگرساز
sسوپر
ble-bind -c 'C-u' 'paru'

سرواژه

یکی دیگه از ویژگی‌های خفنِ ble.sh، تواناییِ ساختنِ سرواژه‌ست! که پس از نوشتنش و فشردنِ کلیدِ جادوییِ فاصله، با گزارهٔ ازپیش‌تعریف‌شده جایگزین می‌شه.

ble-sabbrev D='docker compose'
ble-sabbrev '\d'='/srv/docker/'

حالتِ ویم

با افزودنِ خطِ زیر به .bashrc، حالتِ ویم فعال می‌شه که از گونهٔ سادهٔ vi خیلی پیش‌رفته‌تر و کامل‌تره و از بیشترِ حالاتِ ویم پیشتیبانی می‌کنه.

set -o vi

دو تا نکتهٔ کوچکِ دیگه!

پیش‌نهاد می‌کنم این دو خط رو هم درنگر داشته باشین برای گزینشِ ویرایشگرِ متنِ پیش‌گزیده و هم‌رسانیِ تاریخ‌چه با همهٔ پوسته‌ها.

bleopt editor=nvim
bleopt history_share=1

امکاناتِ سفارشی‌سازیِ این برنامه بسیار بیشتر از اونیه که گمون می‌کنین، اگر می‌خواین بیشتر بدونین پیش‌نهاد می‌کنم از ویکیِ جامعِ خودش دیدن کنین.

سخنِ پایانی

شاید با خودتون بپرسین خب چرا یه‌راست نریم خودِ زی‌شل؟ خب به چند دلیلِ ساده.

  • بش خیلی‌خیلی پایدارتر و فراگیرتره و به‌صورتِ پیش‌گزیده همه‌جا نصبه! به هر کارسازی (سروری) که برسید، به این پوسته برمی‌خورید. پس چه بهتر که دستتون با خودش خو گرفته باشه.
  • بش بهتر از هر پوستهٔ دیگه‌ای با استانداردِ پازیکس سازگاره و می‌شه گفت تقریباً همهٔ کدنوشته‌ها برای اون نوشته می‌شن.
  • اگه تو نامِ شاخه‌ای نیم‌فاصله داشته باشه یا همین که بخواین فارسی بنویسین، جای نیم‌فاصله بهتون کدش رو نشون نمی‌ده!

به‌هرحال اگه دوست داشتین و استفاده کردین، خوش‌حال می‌شم از تجربه‌تون بشنوم و نگرشتونو بدونم. امیدوارم لذت برده باشین :)