آموزش ویم: بخش اول

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

مقدمه اول

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

:D. ما هم همینیم. هی ابزار مختلف امتحان میکنیم تا بتونیم واژه به واژه نویسه‌ها رو به کمک همین دستامون به بهترین و راحت‌ترین شکل ممکن توی فضای ذخیره‌سازی داده‌مون ذخیره کنیم.

vim یا ویم حاصل از عبارت vi improved یا وی‌آی بهبودیافته‌ست. وی‌آی هم جزو اولین ویرایشگرهای متن است که در دهه ۷۰ میلادی توسعه داده می‌شد و جزئی از استاندارد پازیکس هست.

یاد گرفتن ویم به مراتب راحت‌تر از یادگرفتن ایمکس (یکی دیگر از ویرایش‌گرهای متن که توسط ریچارد استالمن نوشته شد و جزئی از پروژه گنو بوده و رقیب سر سخت ویم محسوب می‌شه) و اون ترکیبات جذاب (!) کیبوردشه.

مقدمه دوم

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

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

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

به خاطر همین مسئله بعد از ایمکس روی ویرایش‌گرهای مختلفی مثل atom، brackets و vscode کار کردم اما به نظرم کارکرد مناسبی نداشتند. روی لپ‌تاپ تینک‌پد من با ۸ هسته پردازنده و ۱۶ گیگابایت رم و ۲ گیگاهرتز پردازش‌گر گرافیکی عالی عمل‌ میکردند

اما

روی لپ‌تاپ (یا به تعبیری netbook) eeepc برند ایسوس که اخیراً میبرمش دانشگاه یا اکثر مواقع به خاطر وزن کمش همراه منه با کانفیگ ۴ گیگابایت رم و ۱ هسته پردازنده و ۳۰۰ مگاهرتزی گرافیکی‌ش به شدت فاجعه بودند. فاجعه محض!

مقدمه سوم

به طور کلی هیچ راه‌ میانبر برای یادگیری هیچ‌چیز غیر از راه اصولی یادگیری‌ یعنی یادگرفتن مبحث، نوشتنش به صورت ساده‌ترین شکل ممکن به طوری که بشه به بقیه هم یادش داد، یاد دادنش به دیگران، مرور نوشته‌ها و تمرین و تمرین و تمرین راه دیگه‌ای نداره.

در نتیجه این پست علاوه بر کمک به یاددادن به بقیه، دست نوشته‌های خودمه که بعدها هم در صورت نیاز بهش سر بزنم. به طور کلی توی مبحث یادگیری متد فاین‌من رو حتماً مطالعه کنید و صد البته که practice makes perfect.

مقدمه چهارم

پیش‌نیاز این کار داشتن یه ترمینال، یکم وقت در روز و یکم هم تسلط به کیبورده. راستی هر پست اگه آپدیتی بخوره با تیتر آپدیت و تاریخش نوشته میشه 🙂

در پست‌های آینده هم احتمالا یکم توی ویم حرفه‌ای‌تر میشیم و کانفیگش میکنیم و میشه چیزی که باید بشه.

مقدمه پنجم

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

یادگیری ویم

علاوه بر vimtutor من از یه سری منابع استفاده میکنم که توی بخش منابع قابل دیدن هستن.

مودهای ویم

ویم سه تا مود داره (حداقل تا اینجا که من یادگرفتم). به مرور این مود‌ها میپردازیم.

Normal

یک مود نرمال که برای پیمایش و گشتن و جابه‌جایی بین فایل‌ها و استفاده از دستورها و فرمان‌های ویم مثل نصب تم یا پلاگین استفاده میشه که  با کلید esc فعال میشه.

insert

با زدن کلید i در مود نرمال وارد مود insert میشیم. در این مود میشه متن نوشت و یا بخشی از اون رو حذف کرد. در کل وظیفه ویرایش متن رو داره. برای وارد شدن به این مود از کلید i و وقتی توی مود نرمال هستیم استفاده میکنیم. علاوه بر i از کلید a (شاید به معنی append) هم میشه وارد مود insert شد. اما با یه تغییر. با زدن دکمه i محل قرارگیری نشانگر ویرایش یا cursor دقیقاً همون‌جایی خواهد بود که توی مود نرمال بود. اما وقتی a زده میشه مکان قرارگیری‌ش دقیقاً یه خونه بعد از محل قرارگیری نشانگر توی مود نرمال هست. برای جابه‌جایی بین مودهای مختلف هم لازمه حتما وارد مود نرمال بشیم و بعد وارد مود دیگه بشیم.

فکر کنم برای درک بهتر این دو بخش لازم باشه این asciinema رو ببینیم تا درک کنیم منظورمون دقیقاً چیه. باز اگه ابهامی بود بگید که بیشتر توضیحش بدم.


Visual

این مود با زدن کلید v روشن میشه و مخصوص کارهای ویژوال مثل انتخاب بلوک‌هایی از متنه که خب در آینده در موردش حرف خواهیم زد.

 

جابه‌جایی

برای جا‌به‌جایی در مود نرمال از چهار کلید h j k l استفاده میشه. طبیعتاً از کلید‌های بالا پایین چپ و راست هم برای جابه‌جایی در مود insert استفاده میشه.

اما روند کار با h j k l چطوریه؟ به همین راحتی؛

k ⬆️

h ⬅️                     ➡️ l

j ⬇️

حالا وقتی توی مود نرمال هستیم این دکمه‌ها رو امتحان کنیم تا ببینین چطوری جا به جا میشه. حالا برای اینکه یه تعداد خاص نویسه جا‌به‌جا بشید کافیه عدد قبل اون بزارین. مثلا ۳k سه خط بالا میره یا ۵l پنج نویسه به سمت راست میره.

این asciinema رو حتما ببینید:

جا به جایی بین کلمات

برای جابه‌جایی بین کلمات سه کلید اصلی داریم. w b e سه کلید اصلی ما هستند. حالا شاید بپرسید این جا‌به‌جایی بین کلمات یعنی چی؟ بهتره اول مفهومش رو بخونین اینجا و مثال asciinemaش رو ببینین تا متوجه بشید.

فرض کنید یک متنی داریم که میخوایم یک کلمه بریم جلو. در مود نرمال کافیه یکبار دکمه w رو بزنیم. همینطور اگه بخوایم یک کلمه به عقب برگردیم هم یکبار دکمه b رو میزنیم.

شاید سوال پیش بیاد که اگه بخوایم ۱۰ کلمه بریم جلو یا ۴ کلمه برگردیم عقب چی؟ خب این هم مشکلی نیست. هرچندتا کلمه که نیازدارید جابه‌جا بشید(منظور از جابه‌جایی انتقال cursor یا همون نشانه‌گر به مکان مورد نظر هست) رو وارد کنید و بعدش کلید w و b رو بر حسب نیاز بزنید. مثلاً اگه نیاز دارید ۳ کلمه برید عقب میزنید: ۳b یا ۶ کلمه به جلو اینطوری میشه: ۶w.

اما کاربرد e چیه؟ این کلید مارو میبره به آخرین نویسه اون کلمه. مثلا اگه یک کلمه داشته باشیم مثل start و روی کارکتر s یا t باشیم، در مود نرمال وقتی e رو بزنیم مارو منتقل میکنه به حرف آخر این کلمه یعنی t. در این مسئله مثل دو کلید قبلی میتونیم بر اساس تعداد کلمه هم جابه‌جا بشیم. مثلا ۳e مارو به اندازه ۳ تا کلمه میبره جلو اما روی نویسه آخر کلمه مقصد مارو نگه میداره.

این asciinema برای درک بهتر این مفهوم کمک بزرگی به ما میکنه:

بازی با تکرر

برای بخش یکی مونده به آخر هم یکم با این ترکیب اعداد کار میکنیم.

میخوایم تو ویم ۱۰۰ بار علامت تعجب رو بنویسیم. منطقیه که ۱۰۰ بار ! رو بزنیم؟ نه پس از حالت قبلی ایده میگیریم. میدونیم که با i وارد مود insert میشیم. در نتیجه میتونیم بزنیم ۱۰۰i! و بعدش esc رو میزنیم تا نتیجه رو ببینیم.

نمونه:

خروج از ویم 😀

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

پایان بخش اول

قسمت اول تموم شد. پست بعدی یکم بیشتر توی ویم عمیق میشیم و کارهای باحال‌تری باهاش انجام خواهیم داد.