آموزش Vim

سلام دوستان :slightly_smiling_face:
Vim یک ویرایشگر بسیار قدرتمند و محبوب بین برنامه نویسا ست.
خیلی ها (از جمله خود من!) بارها نصبش کردن ولی چون از کار با اون می ترسیدن یا یه رفرنس ساده براش وجود نداشته, پاکش کردن! در نهایت انقدر wiki و tutorial برای ویم خوندم که تصمیم گرفتم تا یه آموزش بسیار ساده براش بنویسم که دوستان علاقه مند به ویم از یادگیریش نا امید نشن…

لوگوی Vim:
vim_logo

نرم افزار ویم در دو حالت GUI و CLI در دسترس هست.
GUI مخفف Graphical User Interface هست که در این حالت مثل سایر ادیتورهای دیگه از رابط گرافیک استفاده می کنید.
CLI مخفف Command Line User Interface هست که در این حالت از یک محیط متنی استفاده می کنید چیزی شبیه به shell یا همون command line ویندوز!
ما در اینجا از خود vim استفاده می کنیم و از Gvim که رابط گرافیک داره استفاده نمی کنیم.

نصب ویم:
ویم رو تقریبا! می تونید در همه سیستم عامل ها اجرا کنید ولی سیستم های شبه یونیکس انتخاب بسیار بهتری هستند.

نصب در Windows:
در ویندوز می تونید از Gvim استفاده کنید.
البته با نصب git bash بر روی ویندوز امکان استفاده از CLI بر روی git bash هست!

نصب در Mac OS:
در سیستم عامل مکینتاش می تونید از مواردی مثل MacVim, DinVim, VimR و … استفاده کنید.

:speech_balloon: متاسفانه من در مورد Windows و Mac اطلاعات زیادی ندارم پیشنهاد می کنم حتما در اینترنت جست و جو کنید و اگر تجربه ای در این زمینه دارید لطفا کامنت بزارید. جزئیات بیشتری ننوشتم چون ممکن بود اطلاعات اشتباهی بدم.

نصب در GNU/LInux:
خوشبختانه نصب ویم در گنو/لینوکس بسیار ساده ست اگه از توزیع اوبونتو یا سایر توزیع های مشتق شده استفاده می کنید دستور زیر رو وارد کنید:
sudo apt install vim
:dizzy: در نسخه های جدید اوبونتو لازم نیست apt-get بنویسید)
اگه هم از توزیع فدورا یا توزیع های مشتق شده استفاده می کنید:
sudo dnf install vim
یا
sudo yum install vim
(هر کدوم رو اجرا کنید درسته)
خب vim به همین سادگی نصب شد! حالا وقتشه نحوه کار با ویم رو یاد بگیریم :slight_smile: حتما توجه کنید که این آموزش مطابق با سیستم عامل GNU/Linux نوشته شده که در نهایت با کمی تغییر مراحل می تونید در هر سیستم عاملی دستورات یا کارها رو اجرا کنید.

شروع کار:

ترمینال رو باز کنید (معمولا کلید های کنترلی CTRL + ALT + T) یا دسترسی به منو نرم افزارها.
اگه کلمه vim رو بنویسید با صفحه ای مشابه زیر روبرو خواهید شد:

vim-2017

و این یعنی این نرم افزار به درستی روی سیستم عامل شما نصب شده…

اما حالا این صفحه رو ببینید چون فعلا حوصله کار کردن باهاش رو نداریم و می خوایم بازی کنیم :hugs:
این سایت رو باز کنید: https://vim-adventures.com
حتما تعجب کردید که این دیگه چه وضعشه و چه ربطی به این بازی داره :wink:
کلید های حرکتی یا کنترلی که استفاده می کنیم کلید های جهت نیستند!
وقتی ما اومدیم این نرم افزار رو یاد بگیریم از همین اول هم باید قواعدش رو یاد بگیریم اگه قرار باشه مثل سایر محیط های کدنویسی رفتار کنیم خب چه دلیلی داره از ویم استفاده کنیم خیلی بی دردسر همون ها رو استفاده می کنیم دیگه :face_with_raised_eyebrow:
ما توی ویم نباید از ماوس و یه سری کلیدهای دیگه مثل همین کلیدهای جهت استفاده کنیم که در نهایت متوجه میشم دلیلش چیه و چقدر سرعت تایپ ما رو بالا میبره… خب کوتاه سخن!
ما برای جابه جا شدن در صفحه یا حرکت بین متن از کلیدهای زیر استفاده می کنیم (تصویر کاملا گویاست):

moving-cursor--around-vim

پس l (حرف L کوچک انگلیسی) میشه جهت راست
k میشه بالا
J پایین
و در نهایت h میشه جهت چپ
خب بازی یادمون رفت! توی این بازی دائما با این کلید ها درگیر هستید هم سرگرم میشید و هم به تایپ این ها عادت پیدا می کنید (نگران نباشید خیلی زود دستتون عادت می کنه) فکر نمی کنیم لازم باشه این گیم رو آموزش بدم :grin:
هر وقت جای کلیدها رو تا حد نسبتا خوبی یاد گرفتید ادامه آموزش رو ببینید.

حالا وارد به همون روشی که گفتم ویم رو باز کنید.
ما توی این نرم افزار ۴ تا مود حالت نوشتاری داریم:
1- Command Mode
2- Normal Mode
3- Insert Mode
4- Visual Mode
(به موقع همه شون رو توضیح میدم فعلا حالت ۲ و ۳ رو معرفی میکنیم)

زمانی که ویم رو باز می کنیم به صورت پیشفرض در مود Normal قرار داریم توی این حالت شما نمی تونید چیزی تایپ کنید تنها کاری که می تونید انجام بدید اینکه که توی صفحه حرکت کنید (با همون کلید هایی که گفتم یادتون هست که :yum:)
ولی عجله نکنید هنوز نمیشه چون متنی توی این صفحه وجود نداره! خب پس ما به این حالت می گفتیم Normal. حالا چطور می تونیم توی صفحه تایپ کنیم؟
خیلی ساده ست کافیه دکمه i روی کیبوردتون رو فشار بدید. کلید i رو اینطور به خاطر داشته باشید که اول حرف insert به معنای (درج کردن - نوشتن) هست.
حالا شما می تونید توی صفحه تایپ کنید :slight_smile: اگه به پایین صفحه نگاه کنید می بینید که نوشته – INSERT – خب این هم شد مود Insert :hugs:
پس زمانی که در مود Normal بودیم کافی بود کلید i رو فشار بدیم تا بتونیم تایپ کنیم فقط توجه کنید که اگه در این صورت نمی تونیم در صفحه جابه جا بشیم یا به اصطلاح navigate کنیم. بنابراین برای برگشتن به حالت Normal کلید های CTRL و } یا همون کنترل ج خودمون :grin: رو فشار بدید یا کلید Esc یا همون Escape رو فشار بدید.
:writing_hand: نکته: با توجه به اینکه زیاد بین normal mode و insert mode جابه جا میشید و باید کلیدهاش در دسترس باشه به جای Esc از CTRL + } استفاده کنید خیلی بهتر هست)
یه متن یک خطی رو بنویسید حالا وارد normal mode بشید با فشار دادن کلید های h و l می تونید به سمت راست یا به سمت چپ برید. OK?
خب حالا می خوایم به خط بعدی بپریم:
۱- وارد مود normal بشید.
۲- کلید o یا همون (خ) رو فشار بدید.
بعد از اینکار می بینید که cursor یا مکان نمای شما به خط بعد رفته و خودش به مود insert سوییچ کرده متنی رو تایپ کنید و حالا:
۱- به مود normal برید.
۲- کلید O رو فشار بدید (Shift + o) یا همون o بزرگ انگلیسی.
خواهید دید که مکان نما به بین خط بالاتر از خط فعلی که در اون هستید خواهد رفت.
پس o یه خط میره پایین و O یه خط میره بالا.
حالا چند خط رو به همین روش تایپ کنید و بعد به حالت normal برید.
با فشار دادن کلید های حرکتی ویم می تونید بین خطوط حرکت کنید و بالا و پایین و راست و چپ برید : )
انقدر تایپ کنید و تمرین کنید تا دستتون عادت کنه…
:no_entry_sign: به هیچ عنوان از arrow keys یا کلید های جهت کیبوردتتون استفاده نکنید (بعدا یه کاری می کنیم که نتونید استفاده کنید :sunglasses:)

خب حالا ویم رو با ALT + F4 یا علامت ضربدر ببندید. فعلا کاری به ویم نداریم.
ترمینال رو باز کنید.
دستور زیر رو وارد کنید تا وارد مسیر Documents بشیم.

cd Documents

حالا می خوایم توی این مسیر یه folder درست کنیم کافیه بنویسیم:

mkdir dev

کلمه mkdir یه پوشه ایجاد می کنه و dev اسم اون پوشه هست. خب وقتی Enter بزنید می بینید که یک پوشه به اسم dev ایجاد شد.
حالا عبارت
cd dev
رو تایپ می کنیم تا وارد پوشه ای که ساختیم بشیم.
حالا می خوایم یک فایل بسازیم بسته به فایلی که می خواید باهاش کار کنید باید بهش پسوند بدید مثلا اگه من بخوام یک فایل پایتون بسازیم می نویسم example.py یا یه فایل متنی می نویسم example.txt.
خب دستور زیر رو وارد می کنیم تا یک فایل ساخته بشه (اینجا مثلا یک فایل با پسوند html رو میسازیم)
پس تایپ می کنیم:

touch index.html

خب یه فایل با نام index و پسوند html برای ما ساخته شد.
حالا می خوایم اون رو با ویم باز کنیم پس می نویسیم:

vim index.html

وقتی که این رو زدیم می بینم که فایل ما توی ویم باز میشه.
اگه الان دستورات html رو بنویسید می بینید که این نرم افزار فهمیده شما دارید html می نویسید و مطابق با اون رنگ و colorscheme خاصش رو load کرده.
و اما ذخیره کردن و خروج رو هم یاد بگیریم و خداحافظی کنیم.

متنی که توی فایلتون تایپ کردید الان ذخیره نشده و اگه از ویم خارج بشید حذف میشه برای اینکه فایلتون رو حذف کنید باید به صورت زیر عمل کنید:
۱- زمانی که در حالت normal بودید کلید های Shift + ; یا شیفت و سمیکالن یا شیفت و ک :sleepy: رو فشار بدید. خیلی بی دردسر command mode هم یاد گرفتید! هر وقت ما : رو وارد کنیم وارد command mode میشیم توی این حالت می تونیم دستور بنویسیم که بعدا بیشتر می فهمید چه کارهایی میشه باهاش انجام داد. دیگه توجه کنید چنین مواقعی حتما باید normal mode باشید فراموش نکنید.
۲- کلید w رو فشار بدید و بعد Enter بزنید حالا فایل شما به همین سادگی ذخیره شد.
فقط توجه کنید وقتی کلیدها رو می زنید کیبوردتون فارسی نباشه! :open_mouth:
پس دستور w: برای ذخیره فایل بود.
برای خروج از فایل باید q: رو در command mode وارد کنید مراحلش دقیقا مثل ذخیره کردنه فقط به جای w کلید q رو میزنیم.
بسیار خب خیلی خسته شدم :sleeping: و دیگه ادامه آموزش رو در دفعات بعد می نویسم.
ویم بسیار وسیعه و توی آموزش های بعدی کلیدهای کنترلی خیلی زیادی رو توضیح میدم و در قسمت های بعدی نصب پلاگین و تم و خلاصه هر چیزی که لازم باشه رو می نویسم (البته در صورتی که علاقه مند باشید).

fcoU0x7BdAKQuCr3vkwfFnlq8JSYPRgYkCUnYJ6WQB0

موفق باشید. :rose:


قسمت دوم:

برای اینکه بتونید با ویم کار کنید, باید به کلیدهای میانبر و ترکیبی اون مسلط باشید و در این قسمت در قالب یک فهرست مهم ترین اون ها رو بررسی می کنیم و همین طور کلید هایی رو که توضیح دادیم مجددا مرور خواهیم کرد.
نکته) حتما به بزرگی یا کوچکی حروف انگلیسی توجه داشته باشید (مثلا حرف i کوچک انگلیسی با بزرگ فرق می کنه) همینطور دقت کنید که کیبوردتون روی انگلیسی تنظیم شده باشه چون اگه فارسی باشه قادر به انجام دستورات نیستید. فقط حتما دستورات رو تمرین کنید فقط خوندن فایده ای نداره…

Normal Mode و Insert Mode:
i -> فعال کردن حالت نوشتاری یا Insert Mode (قادر به تایپ متن در ادیتور خواهید بود)

Esc یا CTRL و } -> فعال کردن حالت حرکتی یا Normal Mode (قادر به حرکت بین متون خواهید بود)

کلید های حرکتی:
k -> جهت بالا
j -> جهت پایین
l (حرف ال) -> جهت راست
h -> جهت چپ

برای جابه جایی بین کلمات از کلیدهای w, b, e استفاده کنید. وقتی مکان نمای ماوس شما روی یک کلمه قرار دارد:
b -> رفتن به ابتدای کلمه فعلی
w -> رفتن به ابتدای کلمه بعدی
e -> رفتن به انتهای کلمه فعلی

رفتن به اول یا آخر خط فعلی:
0 -> (عدد صفر) -> رفتن به ابتدای خط
$ -> (کلید های ترکیبی Shift و 4) -> رفتن به انتهای خط

رفتن به اول یا آخر خط فعلی و سپس فعال شدن خودکار Insert Mode:
I (حرف آی بزرگ) -> به ابتدای خط فعلی میره و بلافاصله insert mode رو فعال می کنه
A -> به انتهای خط فعلی میره و باز هم insert mode فعال میشه…
:right_anger_bubble: تفاوت این دو کلید با 0 و $ این بود که اون ها در حالت Normal باقی می موندند ولی این دو به حالت Insert سوییچ می کنند.

جابه جایی در کل نوشته (کل فایل):
(در اینجا تصور کنید یک فایل متنی مثلا 1000 خطی داریم)
gg -> (دو بار فشار دادن هزمان کلید g) -> رفتن به ابتدای فایل (اولین کلمه از اولین خط) (خط شماره 1 که مثال زدیم)
G -> (کلید های Shift + g) -> رفتن به انتهای فایل
LineNumber G -> برای رفتن به شماره خط مورد نظر باید شماره خط رو وارد کنید مثلا ۲ (میره خط ۲) یا ۱۰۰۰ (میره خط ۱۰۰۰) بعد G رو وارد کنید.
پس:
شماره خطی که قصد دارید وارد اون بشید رو بزنید بعد G (حرف بزرگ باشه) رو وارد کنید. مثلا 250G شماره به خط 250 میبره (البته باید توی اون خط نوشته باشه اگه مثلا 100 خط داشتید ممکن نیست)
:writing_hand: بعد از وارد کردن این کلیدها, می تونید اون ها رو پایین صفحه ویم ببینید.
:right_anger_bubble: در حال حاضر شماره خط فعال نیست, در قسمت های بعدی حتما توضیح میدیم که چطور اون رو فعال کنید.

جست و جوی کلمه مورد نظر:
جست و جو کردن یک کلمه در ویم بسیار راحت هست :slight_smile: با زدن (فوروارد اسلش) یا / و بعد بلافاصله نوشتن کلمه دلخواهتون می تونید خیلی ساده اون رو پیدا کنید پس:
myWord/ -> جست و جو برای کلمه دلخواه
مثلا text/ کلمه text رو پیدا می کنه یا
devheroes/ کلمه devheroes رو پیدا می کنه (البته اگه وجود داشته باشه :hugs:)

نوشتن متن در خط جدید:
o (حرف کوچک او) -> مثل کلید Enter در یک ویرایشگر عمل می کنه اول به خط بعدی میره و بعد حالت Insert رو فعال می کنه.
O (حرف بزرگ او) -> دقیقا مورد قبل عمل می کنه با این تفاوت که به خط قبل میره.

پاک کردن متن:
ویم در پاک کردن متن هم خلاقیت به خرج داده…
x (حرف کوچک ایکس) -> کلمه جلوی (مقابل) مکان نما رو حذف می کنه
X (حرف بزرگ ایکس) -> کلمه عقب (پشت) مکان نما رو حذف می کنه
نکته) اگه این کلید ها رو نگه دارید کلمات یکی پس از دیگری پشت سر هم حذف میشن…

تغییر یک حرف:
تصور کنید قصد داشتید کلمه Vim رو بنویسید ولی به اشتباه Vin نوشتید.
برای تغییر n به جای m لازم نیست نوشته رو حذف کنید کافیه مکان نما رو روی حرف n بیارید و بعد کلید r رو فشار بدید و در نهایت کلید m رو وارد کنید. پس:
r -> مخفف replace هست و برای تغییرات جزئی مورد استفاده قرار میگیره…

حذف کامل یک خط:
dd -> کلید d رو دو بار پشت سرهم وارد کنید.

کپی و پیست:
yy -> متن رو کپی می کنه
p -> متن رو پیست می کنه

یادتون هست گفتم Visual Mode رو توضیح میدم خب الان قراره توضیح بدم :hugs:
انتخاب کردن کلمه و خط:
v (حرف کوچک وی) -> این کلید Visual Mode رو فعال می کنه و شما می تونید واژه به واژه (با کلید های حرکتی) متن مورد نظرتون رو انتخاب کنید (Select کنید).
V (حرف بزرگ وی) -> این کلید هم Visual Mode رو فعال می کنه با این تفاوت که کل خط رو انتخاب می کنه…
نکته) بعد از اینکه متنتون رو انتخاب کردید می تونید اون رو حذف کنید کپی کنید یا هر بلایی خواستید به سرش بیارید!

undo و redo کردن (معادل فارسیشون رو بلد نبودم :grin:)
u -> همون CTRL + Z خودمونه! به وضعیت قبلی برمیگرده
CTRL و r -> با فشار دادن همزمان کلید های CTRL و r متنی که undo کردید رو redo می کنه! (نمی دونم چی باید می نوشتم :slight_smile: )

اما دستورات زیر که در command mode اجرا میشه رو هم به یاد داشته باشید:
w: ذخیره کردن فایل (همون write هست)
q: (مخفف quite) خروج از فایلی که ذخیره شده.
q!: خروج از فایلی که ذخیره نشده( اگه بخواید از یه فایل که ذخیره نشده خارج بشید باید قبل از q علامت ! بزارید)

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

vi-shock

می دونم خسته شدید ولی کار از قسمت های بعد خیلی جذاب میشه :slight_smile:
در جلسات بعدی میریم که یک ادیتور کاملا حرفه ای از ویم بسازیم.
پیروز باشید :rose:


قسمت سوم
از این به بعد قراره vim رو به یک ادیتور حرفه ای تبدیل کنیم…
اولین گام, تغییر تم یا به اصلاح colorscheme اون هست.
برای اینکه به درستی متوجه تغییر تم بشید پیشنهاد می کنیم یکی از فایل از های حاوی متن رو باز کنید مثلا یک فایل شامل کدهای html. رو باز کنید تا دقیقا متوجه ترکیب رنگ ها بشید.
وارد command mode بشید و دستور زیر رو بنویسید:
colorscheme:
حالا اگه CTRL و D بزنید می تونید فهرست کامل colorscheme هایی که به صورت پیش فرض نصب هستند رو ببینید و اگه هم tab بزنید یکی یکی اون ها رو می تونید پشت سر هم ببینید.
مثلا اگه دستور زیر رو بنویسید و بعد Enter بزنید تم desert رو می تونید مشاهده کنید.
colorscheme desert:
حالا اگه از ویم خارج بشید و مجددا وارد بشید مشاهده خواهید کرد colorscheme ی که فعال کردید غیر فعال شده :slight_smile: خب این طبیعیه دلیلش اینکه که تغییراتی که توی command mode انجام میدید فقط تا زمانی باقی می مونه که از ویم خارج نشید! بنابراین ما اینجا به یک فایل به نام vimrc نیاز داریم تا تمام دستوراتی که به اون نیاز داریم رو بهش اضافه کنیم تا لازم نباشه هر بار با باز کردن ویم اون دستورات رو انجام بدید. vimrc در واقع یه جورایی محلی برای ذخیره سازی تنظیمات ویم هست.
خب میریم که vimrc رو بسازیم (این روش در سیستم های شبه یونیکس مشترک هست)
اول وارد مسیر home میشیم (پیشنهاد می کنم vimrc رو فقط اینجا قرار بدید)
cd $HOME
با زدن دستور زیر اول ویم رو باز می کنید و فایل vimrc رو فراخوانی می کنید فراموش نکنید حتما فایل رو ذخیره کنید تا vimrc اضافه بشه…
vim .vimrc
نکته بسیار مهم) فایل vimrc حتما حتما باید اولش . یا dot باشه فایل هایی که در گنو/لینوکس اولشون با dot شروع میشه یعنی مخفی هستند.


ممکنه توی Mac محل فایل vimrc فرق کنه برای همین اگر شک دارین دستور زیر رو اجرا کنید:

vim --version

در خطوط آخر باید چند خط مثل این رو ببینید:

   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
      user exrc file: "$HOME/.exrc"
       defaults file: "$VIMRUNTIME/defaults.vim"
  fall-back for $VIM: "/usr/share/vim"

این آدرس هایی هست که vim وقتی باز میشه اونا رو برای vimrc چک میکنه پس فایل vimrc رو باید در محل یکی از این آدرس ها ایجاد کنید.
دقت کنید که فایل vimrc درون دایرکتوری home با . شروع میشه و مخفی هست اما vimrc داخل دایرکتوری .vim مخفی نیست.


اگه دستور زیر رو به vimrc اضافه کنید از این به بعد همیشه colorscheme شما desert خواهد بود.
colorscheme desert
لازم هم نیست حتما علامت کالن یا : رو بزارید.
بنابراین
colorscheme desert:
colorscheme desert
هر دو درست هستند.
اما این colorscheme ها به اندازه ای که باید خوب نیستند و ما میریم که از بین بهترین ها انتخاب کنیم.
با یک جست و جوی ساده vim colorschemes می تونید به مجموعه بسیار زیادی از تم ها دسترسی داشته باشید مثل این سایت http://vimcolors.com
در این جا هم می تونید فهرستی از محبوب ترین تم ها رو مشاهده کنید: slant.co این موضوع کاملا سلیقه ای هست هر تمی که دوست دارید دانلود کنید من به شخصه Gruvbox رو بیشتر از همه دوست دارم. فایلی که دانلود می کنید باید پسوند vim. داشته باشه خب من GruvBox رو از اینجا دانلود می کنم.
برای نصب تم فقط کافیه یک فولدر با پسوند vim. ایجاد کنید.
mkdir .vim
و بعد وارد اون بشید:
cd .vim
یک فولدر با نام colors ایجاد کنید:
mkdir colors
و در نهایت فایلی که دانلود کردید رو در فولدر colors اضافه کنید.
حالا به vimrc. برید و کدهای زیر رو اضافه کنید.
syntax on
این دستور باعث فعال بودن colorschemes میشه اگه روی off تنظیمش کنید تم شما غیر فعال میشه…
و در نهایت کد زیر رو اضافه کنید تا اون تم انتخاب بشه:
colorscheme gruvbox
اگه تمی غیر از gruvbox رو نوشتید اسم اون رو بنویسید.
پس به همین سادگی نصب تم رو یاد گرفتیم :slight_smile:
بعد از اتمام کار vim رو ریستارت کنید (یک بار ازش خارج و مجددا وارد بشید) تا تغییرات رو ببینید.


قسمت چهارم
فایل vimrc. یکی از مهم ترین قسمت های تشکیل دهنده ویم هست. در واقع این فایل شامل تنظیمات ادیتور ماست.
حالا بریم یکم بیشتر باهاش کار کنیم.
نکته) بعد از این که colorscheme, plugin یا هر تغییری که در vimrc. ایجاد کردید حتما حتما یکبار ویم رو ریستارت کنید یعنی از ویم خارج بشید و مجددا وارد شید.
اول از هر چیزی برای قرار دادن کامنت در vimrc. از دابل کوتیشن " استفاده می کنیم. حتما حتما برای دستوراتی که اضافه می کنید کامنت بنویسید و توضیحاتی درباره عملکرد اون ها اضافه کنید تا بعدا بتونید بدون مشکل دستورات و کدها رو بفهمید.
خب… برای اینکه شیطان رجیم وسوسه تون نکنه تا از جهت ها به جای h j k l استفاده کنید :slight_smile: همین اول کار کد زیر رو اضافه کنید و خودتون رو راحت کنید. دستورات زیر باعث میشه تا کلید های حرکتی شما کار نکنند:

" Disable Arrow keys in Escape mode
map <up> <nop>
map <down> <nop>
map <left> <nop>
map <right> <nop>

" Disable Arrow keys in Insert mode
imap <up> <nop>
imap <down> <nop>
imap <left> <nop>
imap <right> <nop>

دستور اول کلیدهای حرکتی رو در حالت Escape غیر فعال می کنه و دستور دوم در حالت Insert.
بسیار خب فراموش نکنید ویم رو ریستارت کنید.
توی این فایل می تونید هر کاری انجام بدید که من این کار رو فقط و فقط به خودتون واگذار می کنم چون هیچ کسی بهتر از خود شما نمی تونه بفهمه که چه نیازهایی دارید. فایل vimrc. من کدهای خیلی زیادی داره که فقط یکی دو موردش رو خدمت شما عرض می کنم با یک جست و جوی ساده در اینترنت می تونید نیازهاتون رو برطرف کنید.
دستور زیر شماره خط رو نمایش میده:

set number " Display line numbers on the left side

کد زیر از ایجاد فایل های swap که ممکنه کلافه تون کنه جلوگیری می کنه:

set noswapfile " Avoid swap files

کد زیر باعث میشه اگه متنتون طولانی بشه خط شکسته بشه:

set wrap " Wrap lines

یا اگه تمایل داشته باشید می تونید Autocomplete برای یه سری از دستورات قرار بدید:

" Auto complete for ( , " , ' , [ , { 
:inoremap        (  ()<Left>
:inoremap        "  ""<Left>
:inoremap        `  ``<Left>
:inoremap        '  ''<Left>
:inoremap        [  []<Left>
:inoremap      {  {}<Left>

من این کد رو نوشتم تا اگه متنم بیشتر از ۸۰ کاراکتر شد متوجه بشم:

" Forbidden +80 characters in vim
:set textwidth=78
:set colorcolumn=+1
highlight ExtraWhitespace ctermbg=darkred guibg=#FF0000
match ExtraWhitespace /\s\+$/
highlight OverLength ctermbg=red guibg=#FF0000
2match OverLength /\%80v.\+/

خب پس این هم از vimrc. هر چیز دیگه ای می خواید با جست و جو پیدا کنید یا کامنت بزارید تا اگه تونستم کمکتون کنم :rose:

وقت نصب کردنه پلاگینه… چه کار سختی :sunglasses: نه نگران نباشید اصلا هم سخت نیست. نصب پلاگین توی ویم عین آب خوردنه…
شما برای نصب پلاگین دو راه دارید:
۱- یه پوشه به اسم vim. ایجاد کنید و فولدرهای اون پلاگینی رو که دانلود کردید به صورت دستی در اون مسیر کپی پیست کنید که این شاید خستتون کنه از کپی پیست کردن…
۲- از یه Plugin Manger استفاده کنید انواع و اقسامش وجود داره مثل vim-plug, Vundle, … که من Pathogen رو پیشنهاد می کنم کار باهاش فوق العاده ساده ست.
برای دانلود پلاگین های vim سایت های خیلی زیادی وجود دارند مثل: https://vimawesome.com , vim.org, github.com

برای دانلود Pathogen روی این (لینک) کلیک کنید روش نصبش هم به صورت زیر هست:

mkdir -p ~/.vim/autoload ~/.vim/bundle && \
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

که پیشنهاد می کنم توضیحات خود سایت رو بخونید چون این جا متن رو میزارم بهم میریزه :slight_smile:
یا می تونید مستقیم دانلود کنید و توی مسیر vim/autoload قرار بدید.
پس باز هم میگم اول وارد فولدر vim. میشید و بعد اونجا یه فولدر دیگه به نام autoload درست می کنید یا پوشه autoload رو همونجا کپی و پیست می کنید.
فقط توجه کنید نصب بعضی از پلاگین های ویم یه سری جزئیات داره مثلا برای pathogen باید دستور زیر رو به vimrc. هم اضافه کنید:

execute pathogen#infect()

بعد از نصب این پلاگین منیجر دیگه کار ما خیلی ساده شده فقط و فقط کافیه یک پوشه به نام bundle توی vim. ایجاد کنید و پلاگین هاتون رو اونجا قرار بدید فقط یادتون نره که اون ها رو از حالت فشرده خارج کنید! یا می تونید از روش command استفاده کنید هر کدوم که خودتون راحت تر هستید.

ما مفاهیم کلی ویم رو بررسی کردیم و برای یادگیری بیشتر باید جست و جو کرد و مطالعه بیشتری داشت ولی کلیات همین موارد بودند.
در پایان یه سری پلاگین که خیلی مهم و پرکاربرد هستند رو معرفی می کنم:

NERDTree: یه فایل explorer خیلی باحال که میشه هر بلایی سرش آورد از تغییر سایزش گرفته تا تغییر کلید هایش و هر چیزی که فکر کنید به هیچ عنوان این رو از دست ندید. توی vimrc. من سایزش رو کوچکتر کردم و یه کاری کردم تا با F7 باز یا بسته بشه:

" NERDTree
:let g:NERDTreeWinSize=20
:let g:Tlist_WinWidth=60
map <F7> :NERDTreeToggle<CR>

vim-airline: اگه این رو نصب نکنید نصف عمرتون بر فناست :grin: ویم رو فوق العاده خوشگل می کنه…
در صورتی که پلاگین منیجر Pathogen رو نصب کردین با دستور زیر توی ترمینال میتونید نصبش کنید:

git clone https://github.com/vim-airline/vim-airline ~/.vim/bundle/vim-airline

حواستون باشه که قبلش باید git رو نصب کرده باشین!
چیزی دیگه ای نمی گم فقط این رو هم از دست ندید!

Syntastic: خطاهای کدهاتون رو پیدا می کنه و بهتون اطلاع میده…

YouCompleteMe: این پلاگین کامل کننده خودکار کد هست (autocomplete) برای زبان های زیر
C-family, C#, Go, Java, Python, Rust, and JavaScript/TypeScript

vim-autoformat: قالب بندی کردن کد

بقیه رو بر اساس نیازهاتون پیدا کنید.
راستی اگه پایتون می نویسید دستور زیر باعث میشه با فشردن کلید F8 کد رو توی Shell اجرا کنید. (در vimrc. اضافه کنید)

" Run python code in vim
nnoremap <buffer> <F8> :exec '!python' shellescape(@%, 1)<cr>

اگه autosave هم دوست دارید این رو اضافه کنید:

let g:auto_save = 1  " enable AutoSave on Vim startup
let g:auto_save_in_insert_mode = 0  " do not save while in insert mode

و اما بیشتر از این نمی نویسم چون فکر می کنم توضیحات به اندازه کافی کامل هست. هر سوالی بود در خدمت هستم.
این هم یه تصویر از ویم من :slight_smile:

پیروز باشید :rose:


به روز رسانی (۱۳۹۷/۰۷/۳۰):

فارسی نویسی در Vim:
بعد از صحبتی که با آقای @rezaqqq عزیز داشتم متوجه شدم که خوشبختانه میشه در ویم فارسی هم نوشت البته نه به خوبی نرم افزاری مثل gedit. به عنوان مثال حرف ((ی)) به طور صحیح نوشته نمیشه هرچند مشکلی در خروجی وجود نداره…
از نسخه ۷ به بعد قابلیت فارسی نوشتن به ویم اضافه شده و برای نوشتن فارسی کافیه دو کار ساده انجام بدید:

اول متن رو راست چین کنید:

:set rl

و بعد keymapping فارسی رو set کنید:

:set akm
:set fk

اگه کدهای زیر رو به vimrc اضافه کنید همیشه متنتون راست چین میشه و این موضوع آزار دهنده ست. به همین خاطر یه map براش تعریف کردم. زمانی که در حالت normal mode هستید اگه کلمه farsi رو بنویسید متغیرهای مذکور در vim اعمال میشه:

" Farsi 
map farsi :set akm<NL>:set fk<NL>:set rl<NL>

پس پیشنهاد می کنم فقط همین دو خط رو به vimrc اضافه کنید.

  • اگه امکان نصب فونت فارسی وجود داشت به زودی اضافه می کنم *
14 پسندیده

مرسی از این پست مفید :cherry_blossom:

3 پسندیده

خیلی خوب بود ممنون،
فقط یک سری نکات دیگه هم هست که مربوط به بیسیک vim میشه، مثل سرچ کردن، رفتن به ابتدا و انتهای فایل، رفتن به خط مورد نظر و چند مورد دیگه که بجای توضیح پیشنهاد میکنم در لینک زیر تمرین کنید، در واقع این سایت که معرفی میکنم سریعترین راه یادگیری vim هست.
یک مورد دیگه هم اینه واقعا اشکالی نداره از چه کلید هایی برای حرکت در vim استفاده کنیم، خب خیلی خوبه که از lkjh استفاده کنیم چون دست کمتر روی کیبرد حرکت میکنه، اما این قانون vim نیست، فقط یک گزینه اضافست که در insert mode هم خیلی جواب نمیده.

اینجا تمرین کنید
http://www.openvim.com/

3 پسندیده

Neovim یک پروژه تقریبا جدیده که خیلی از اشکالات vim توش حل شده و پرفرمنس بهتری داره.

https://neovim.io/

3 پسندیده

متشکرم…
راستش قصد داشتم مواردی رو که فرمودید در قسمت های بعدی آموزش بدم… در هر صورت ممنون از لینکی که فرستادید.
بله جناب توماج عزیز فرمایش شما کاملا متین هست ولی خودتون بهتر می دونید دیگه اگه از همون اول عادت کنیم این کلید ها رو بزنیم سرعت کار خیلی بالا میره ضمن اینکه باید از همون اول به تغییر و یادگیری کلیدهای جدید عادت کنیم. این مورد هم درسته این ها توی مود insert غیر فعال هستند.

4 پسندیده

منم موافقت کردم اما منظورم این بود که خیلی واقعا مهم نیست بخصوص روی کیبرد های کامپکت.

راستی! من قبلا که خیلی با ویم کار میکردم از بعضی از پلاگین های سایت زیر استفاده میکردم

2 پسندیده

ممنون @toomaj , @Trisquel به خاطر آموزش هایی که ارائه دادید واقعا عالی بودن .
یکی دیگه از منابع یادگیری ویم خودش هست که کافیه توی ترمینال دستور vimtutor رو بزنید البته برای کسایی خوبه که حال انگلیسی خوندن رو داشته باشن

2 پسندیده

خواهش می کنم لطف دارید…
بله منبع و سایت های آنلاین هم زیاد هستند و سایت های زیادی هستند که پلاگین های ویم رو قرار دادند انشالله در قسمت های بعدی همه رو معرفی می کنم.

3 پسندیده

من ی چیزی رو نمیفهمم :neutral_face:
اگر از اون کلید ها برای جهت استفاده میکند، چطور اون حرف ها رو تایپ میکنید؟

2 پسندیده

دو تا حالت رو تصور کنید:
insert (درج کردن - نوشتن)
normal (عادی)
ما وقتی که توی حالت normal هستیم می تونیم از اون کلیدهایی که شما فرمودید برای حرکت استفاده کنیم یعنی در این حالت اگه j k l h رو بزنیم اون ها نوشته نمیشن بلکه باعث حرکت شما بین خطوط میشن…
اما وقتی توی حالت insert هستیم اگه هر کدوم از کلیدهایی که خدمتتون عرض کردم رو بزنیم اون ها رو تایپ می کنه.
ما با فشار دادن i به حالت insert و فشار دادن کلیدهای CTRL و } به حالت normal میریم.

3 پسندیده

Escape هم میبره به normal mode، اما خب بازم میشه مثل همون بحثون درمورد lkjh

1 پسندیده

سخت نیست همش دکمه بزنی؟

1 پسندیده

تایپ ۱۰ انگشتی رو تصور کنید… اوایل کار یه خورده خسته میشید ولی وقتی این کار رو یاد گرفتید دیگه بدون اینکه فکر کنید و دنبال جای دکمه ها بگردید تایپ می کنید. ویم هم همینطوره… شاید اول ترسناک به نظر برسه که دائما جابه جا شدن بین کلیدها آزار دهنده ست ولی واقعا اینطور نیست! بعدا خیلی خیلی ساده و لذت بخش میشه…
توی ویم میشه استفاده از ماوس رو هم فعال کرد ولی من خودم ترجیح میدم از ماوس استفاده نکنم و فقط از کیبورد استفاده کنم.

5 پسندیده

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

2 پسندیده

مگر کلا باید کار دیگه ای انجام داد؟

2 پسندیده

جناب توماج درسته ولی اصلا حس vim رو نمی تونه منتقل کنه :hugs::grin: vim mode توی یه ادیتوری نصب کردم خیلی از کلیدها رو نداشت.
من به شخصه ترجیح میدم یک ادیتور با ویژگی هایی که می خوام بسازم. ادیتورهای دیگه قابلیت های اضافی زیادی دارند که دست و پا گیره :))

1 پسندیده

فقط با قسمت دوم فرمایشتون موافقم،

1 پسندیده

ارادت دارم…
خیلی وقت پیش روی اتم vim mode نصب کردم یادمه حتی :q میزدم از اتم خارج نمیشد :grin: از طرفی من توی NERDTree با کلی کلید کنترلی پنجره باز و بسته و راحت بینشون سوییچ می کنم البته شاید من پلاگین خوبی نصب نکردم یا خیلی با vim mode کار نکردم.
در کل فرمایشتون صحیح هست من اگر مثلا قرار بود یه پروژه با Qt انجام بدم حتما. Vim Mode نصب می کردم ولی راستش دلیلی نمیبینم روی یه ادیتور ساده استفاده کنم تا وقتی که جناب ویم هستند :hugs:

1 پسندیده

من اصلا از اتم استفاده نمیکنم اما بازم اتم ide هست ولی vim ویرایشگر متن، من از evil mode در spacemacs استفاده میکنم و هیچ مشکلی هم ندارم. Vim هم اشکالات زیادی داره و همین باعث شد به سمت emacs برم.
یک ادیتور دیگه که خیلی خیلی نظر منو جلب کرده Xi (زای) هست اما هنوز به prod نرسیده، هرچند با سرعت زیادی در حال توسعست، منتظرم که یه روزی ازش استفاده کنم.

1 پسندیده

آقای توماج عزیز, ببخشید حالا که خودتون فرمودید…
میشه بپرسم چی شد سمت emacs رفتید؟
اگه ممکنه اون مسائلی که باعث شد emacs رو به vim برتر بدونید بفرمایید.
ضمنا ممنون از لینکی که فرستادید…

1 پسندیده