آشنایی با (Vim (VI IMproved
نویسنده: ۴۰۴
ویرایش: شایان پویا
اصلا Vim چیست؟!
یک ویرایشگر فایل های متنی برای سیستم عاملهای یونیکس (شامل لینوکس، BSD و ...) و ویندوز است. برنامه تحت کنسول اجرا شده و نیاز به محیط گرافیکی ندارد. البته اگر از کنسول دل خوشی ندارید (که امید وارم اینگونه نباشد!)، می توانید از رابط گرافیکی GVIM در محیطهای گرافیکی استفاده کنید.
چرا Vim؟؟
به نظر نگارنده، Vim چند ویژگی برجسته دارد که شاید نشود در ویرایشگرهای دیگر همهی آنها را با هم یافت:
اولین و شاید مهمترین ویژگی Vim فرمانپذیری آن است. یعنی شما با استفاده از یک command می توانید تغییراتی را روی متن اعمال کنید که با استفاده از محیط گرافیکی بسیار وقت گیر خواهد بود. همین مسئله میتواند سرعت شما را در برنامه نویسی بسیار بالا می برد.
همچنین شما نیازی ندارید که برای کامپایل کردن برنامه هایتان terminal باز کنید! بلکه vim می تواند دستورات shell سیستم و حتی خود shell را اجرا کند! تنها با اضافه کردن یک ! اول دستوراتی که در command mode به آن داده می شود.
همچنین می توانید دستور های مختلف را با هم ترکیب کنید تا بیش تر حال کنید!
و...
اجرای Vim
برای اجرای Vim تنها کافی است تایپ کنید vim البته برخی دستورات دیگر مانند evim,eview,view,gvim,rvim,vimdiff و دیگر مشتقات این کلمات
هم به اجرای این برنامه یا زیر مجموعه هایش منجر می شود. دستور ex هم حالت اجرایی تک خط را اجرا می کند. (اگر مایلید بدونید که از کدوم نسخه vim استفاده می کنید از دستور :version استفاده کنید) توجه:gvim حالت گرافیکی استاندارد است. view تنها در حالت فقط خواندنی کار می کند. eview مثل gvim اما سادهتر و rvim حالت محدود شده آن است.
شروع کار با Vim
بگذارید کار با Vim را شروع کنیم! ویرایشگر vim چند حالت نمایشی دارد: حالت عادی (normal mode )، حالت دستوری ( command mode )، حالت نوشتن (writing mode)، حالت تصویری (visual mode ) , حالت ex
در ابتدا شما نمی توانید چیزی بنویسید. برای ورود متن یکی از کلید های insert,i,a را فشار دهید تا به حالت insert وارد شوید. اکنون متن های خود را بنویسید و برای خروج از این حالت کلید esc را فشار دهید. برای رفتن به حالت دستوری کافی است : را بزنید. حالت ex یا ویراست خط به خط با دستور :ex قابل فراخوانی است و حالت ویژوال هم با v اجرا می شود. توجه کنید که Vim دو شکل دستور دارد: بخشی از آنها مستقیما با تایپ نامشان در حالت عادی قابل اجرا هستند ولی بخشی دیگر را باید بعد از زدن : در حالت دستور اجرا کرد.
حرکت در متن
ساده ترین روش برای حرکت در متن مشابه همون چیزی است که فکر می کنید! استفاده از کلید های بالا- پایین-چپ- راست همراه با pgDown,pgUp و حذف متن با کلید های Del,BackSpace. اما در vim روش های دیگری هم برای خوردن لقمه هست!
عملیات |
کلیدهای ورودی |
نیم صفحه بالا می رود |
ctrl+U |
نیم صفحه پایین می آید |
ctrl+D |
واحد کلمه |
|
به ابتدای کلمه بعدی می رود |
w |
به انتهای کلمه فعلی می رود |
b |
یک کلمه جلو می رود |
e |
واحد جمله |
|
یک جمله به جلو می رود |
( |
یک جمله عقب می رود |
) |
واحد پاراگراف |
|
یک پاراگراف جلو می رود |
{ |
یک پاراگراف عقب می رود |
} |
اضافه کردن متن |
|
بعد از مکان کرسر addکردن |
a |
در جایگاه کرسر insertکردن |
i |
در زیر خط جدید open کردن |
o |
در انتهای خط فعلی Add کردن |
A |
در ابتدای خط فعلی Insert کردن |
I |
بالای خط Open کردن |
O |
توجه کنید که فرق e و w در یک space ناقابل است
توجه مهم! یک مسئله این هست که می توان به این دستور ها مشابه اپراتور نگاه کرد. مثلا3w سه واحد کلمه در متن جلو می رود یا 4o بعد از نوشتن خط ۳ بار دیگر نیز آن را می نویسد.
یک سری دستور بدرد بخور!
خط را تا آخر حذف می کند |
D یا dd |
خط را تاآخر کپی می کند |
yy |
خط را تا آخر پیست می کند |
p |
از vim خارج می شود. |
:q |
فایل را save می کند.(اگر برای اولین بار فایل را ذخیره می کنید بعد آن نام فایل را بنویسید) |
:w |
به انتها می رود. اگر قبلش عدد باشد به ان خط می رود |
G |
تغییرات را به حالت قبل بر می گرداند undo کردن |
u |
چیزی رو که undo کرده اید دوبراه به شکل اول بر می گرداند redo کردن |
ctrl+r |
توجه کنید که همه این دستور ها case sensitive هستند.
کپی و پیست کردن :copy & paste| yank and put
در vim برای کپی و پیست از y و p استفاده می شود. کافیست کرسر را به جایی که می خواهید ببرید و بعد از y تعداد کلمات یا جملات و .. را مشخص کنید و بعد در مکان مناسب پیست کنید. مثلا دستور
y4w
به اندازه ۴ کلمه کپی می کند و برای پیست کردن هم کافی است از p استفاده کنید. برای دیدن کلیه محتوات کپی شده هم از :reg استفاده کنید. در اینجا توانایی ترکیب دستورات رو هم به وضوح می بینید!
چند ویژگی بدرد بخور
جستجو در متن
با استفاده از / یا ؟ صورت می گیرد. فرق این دو در این است که / جستجو را به سمت بالا و ؟ جستجو را به سمت پایین انجام می دهد. البته جستجو هم در vim به صورت case sensitive است که برای نادیده گرفتن آن از :set ignorecase و برای برگشت به حالت قبل از :set noignorecase استفاده کنید. همچنین توجه کتید که حتی جستجو هم در vim پارامتر می خورد.مثلا:
/int e
یعنی دنبال کلمه int گشته و کرسر را به انتهای آن می برد.
syntax highlighting
اگر پسوند فایل یک پسوند آشنا مانند .c یا .cpp یا .html و ... باشد که Vim خودش این کار را انجام می دهد. فقط کافی است توانایی آن را با دستور:
:syn on
روشن کنید(برای خاموش کردنش هم بدیهی است از :syn off باید استفاده شود) اما اگر فایل شما بدون پسوند باشد برنامه در گل می ماند! نوبت خودتان است که به برنامه بگویید این کار را انجام دهد از این دستور استفاده کنید:
:syntax enable
و بعد نوع فایل بر اساس زبانی که می نویسید:
:set filetype=language
مثلا :set filetype=c
استفاده از کالر سکیم
می توانید نوع کالرسکیم را انتخاب کنید. با استفاده از دستور:
:colorscheme ....
که در حالت default قرار دارد. بعد از نوشتن :colorshceme دکمه tab را فشار دهید تا کالرسکیم های مختف را ببینید.(به نظر من باحال ترینشون koehler هست!)
indention
این کار در خوانایی برنامه تاثیر بسیار دارد.vim دارای ۳ نوع ایندنت است:cindent, autoindent, smartindent که cindent برنامه را بر اساس زبان های C/C++ ایندنت می کند. smartindent هم مشابه آن است. و autoindent هم بر اساس خط قبلی کد را مرتب می کند.
برای استفاده از آن ها نیز کافی است آن ها را بعد از :set بکار برید. مثلا:
:set cin
یا
:set ai
keyword completion
هنگام برنامه نویسی می توانید از ویژگی های خودکار Vim برای کامل کردن متن استفاده کنید. برای این منظور باید ctrl+p را فشار دهید. برای سویچ کردن بین چند مورد یا بازگشت به حالت اول هم کافی است چند بار آن را فشار دهید.
٪
درصد یک ویژگی بدرد بخور vim است. اگر زبان را فعال کرده باشید هنگام بستن آکولاد شروعش را به شما نشان می دهد. در مورد کامنت ها هم چنین است. کافی است در مد نرمال بر روی یک آکولاد رفته و ٪ را فشار دهید تا شاهد یک معجره باشید! (بدیهی است که منظور فشار دادن ۵ و shift است)
عمل fold کردن
وقتی کد زیادی دراز(!) و پیچیده می شود بد نیست قسمت هایی از آن را فولد کنیم. مثلا تابعی که می دانیم درست کار می کند یا موارد مشابه... این کار کدتان را جمع و جور می کند تا راحت تر با آن دست و پنجه نرم کنید! برای این کار از دستور zfX استفاده می شود که X معلوم می کند چه چیزی قرار است پوشانده شود. ۱۰ کلمه بعدی یا ۷ خط قبلی؟ فولد همچنین رابطه خوبی با ٪ دارد. اگر می خواهید یک تابع را ببندید در مد نرمال بر روی آکولاد رفته و zf% بزنید.(توجه داشته باشید که zf از آن جمله دستور هایی است که نیاز به : و نوشتن در مد دستوری ندارد و در مد نرمال به همین صورت به کار می رود)برای باز کردن یک فولد هم کافی است کرسر را روی آن حرکت دهید یا اگر با کلاس تر از این حرف ها هستید بزنید zo
.
برنامه نویسی در Vim
به هر حال شما قرار است در Vim برنامه بنویسید. پس باید بتوانید برنامه هایی را که نوشته اید درون خود vim کامپایل و اجرا کنید! در این زمینه بدون شک Vim بهترین است. به همین دلیل باید با این ۲ روش آشنایی داشته باشید:
- ۱-ویرایشگر vim می تواند دستورات پوستهی سیستم و حتی خود پوسته را اجرا کند. برای مثال شما می توانید کامپایلر gcc را صدا بزنید و بعد برنامه تان را اجرا و خروجی را مشاهده کنید.برای اینکه یک دستور خارجی را در Vim اجرا کنید باید قبل از آن ! قرار دهید (البته باید توجه کنید این علامت را با ! ی که بعد دستورات خود Vim برای force کردن به کار می رود اشتباه نگیرید) مثلا می توانید با استفاده از دستور
!ls -a
تمامی فایل ها و ببینید یا دستور
!g++ -Wall -O2 -o 404.out 404.cpp
برنامه تون رو که مثلا به نام 404.cpp هست کامپایل می کنه و اگر خطا در آن بود، خطا و همچنین اخطارها برای شما نمایش داده میشوند. بدیهی است که برای اجرای این برنامه باید از دستور:
!./404.out
استفاده کنید.
- ۲. می توانید مستقیما از دستور make: استفاده کنید. برای این کار باید یک makefile بنویسید اما اگر فقط می خواهید یک فایل رو کامپایل کنید چندان نیازی به این کار نیست. مستقیما از دستور
make 404.cpp: استفاده کنید. مزیت make در این هست که اگر خطایی در برنامه شما پیدا شود به محل میرود و خطا را به شما نشان می دهد. اگر بیش تر از ۱ خطا داشتید با دستور های:
cn:
cp:
به مکان های خطاهای بعدی یا قبلی بروید. دستور:
cl:
هم لیست خطا ها را به شما نشان می دهد.
چطور تنظیمات پیش فرض را در Vim عوض کنیم؟
چاره کار و کل زندگی Vim شما در یک چیز خلاصه می شود: فایل vimrc.
- کافی است دستورات مورد نظرتان را در این فایل پنهان که در پوشهی خانه(home) تان قرار دارد اضافه کنید. اگر چنین فایلی وجود ندارد آن را ایجاد کنید. مثلا در اینجا محتویات vimrc. من را می بینید:
"سلام خفن!"echo
set cin
set nu!
colorscheme koehler
syn on
cd ~/Desktop/USACO/codes "the folder in which my codes are located in"
- (خداییش مورد اول حال بسیار زیادی به شما می ده وقتی وارد Vim می شوید! توجه کنید برای نوشتن کامنت هم آن را در دابل کوت یا " باید بنویسید.)
نکاتی برای یاد آوری:
۱. ممکن است یک سری از موارد ذکر شده در اینجا در ورژن های مختلف اندکی تفاوت داشته باشند یا اصلن وجود نداشته باشند. مثلا colorscheme در ورژن های قدیمی تر به صورت color به کار می رود یا دستور syn on در ورژن های خیلی قدیمی وجود ندارد!
۲. توضیحاتی که در زمینه vimrc گفته شد مربوط به لینوکس هستند و مسیر این فایل در سیستم عامل ویندوز مقداری تفاوت دارد.
۳. در فایل vimrc می توان علاوه بر دستورات خود Vim از shell scripting هم استفاده کنید. همان طور که در مثال هم استفاده از echo را دیدید.
راهنمای استفاده از Help ویرایشگر
با فرمان help: وارد راهنمای آن می شوید و از همان ابتدا متوجه عباراتی می شوید مابین دو | قرار گرفته اند. در واقع این عبارات پیوند بین صفحات مختلف Help می باشند برای اینکه وارد هر یک از این صفحات شوید ۲ راه وجود دارد:
۱- نشانگر ماوس را روی هر یک از این پیوندها برده و کلید های ] + Ctrl را فشار دهید برای بازگشت به مکان اولیه از کلید های Ctrl+t استفاده کنید.
۲- دستور زیر را وارد کنید:
set mouse=a:
حالا می توانید از خود ماوس استفاده کرده و روی موارد مورد نظر کلیک کنید. البته اگر از GVIM استفاده می کنید نیازی به این فرمان نیست و ماوس به طور پیش فرض فعال است.
توجه: این قسمت در مورد لینوکس صادق است و در ویندوز اندکی متفاوت است.