آشنایی با (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

توجه مهم! یک مسئله این هست که می توان به این دستور ها مشابه اپراتور نگاه کرد. مثلا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 :D .

برنامه نویسی در Vim

به هر حال شما قرار است در Vim برنامه بنویسید. پس باید بتوانید برنامه هایی را که نوشته اید درون خود vim کامپایل و اجرا کنید! در این زمینه بدون شک Vim بهترین است. به همین دلیل باید با این ۲ روش آشنایی داشته باشید:

!ls -a

تمامی فایل ها و ببینید یا دستور

!g++ -Wall -O2 -o 404.out 404.cpp

برنامه تون رو که مثلا به نام 404.cpp هست کامپایل می کنه و اگر خطا در آن بود، خطا و همچنین اخطارها برای شما نمایش داده می‌شوند. بدیهی است که برای اجرای این برنامه باید از دستور:

!./404.out

استفاده کنید.

   make 404.cpp: 

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

cn:

cp:

به مکان های خطاهای بعدی یا قبلی بروید. دستور:

cl:

هم لیست خطا ها را به شما نشان می دهد.

چطور تنظیمات پیش فرض را در Vim عوض کنیم؟

چاره کار و کل زندگی Vim شما در یک چیز خلاصه می شود: فایل vimrc.

 "سلام خفن!"echo
set cin
set nu!
colorscheme koehler
syn on
cd ~/Desktop/USACO/codes "the folder in which my codes are located in"

نکاتی برای یاد آوری:

راهنمای استفاده از Help ویرایشگر

با فرمان help: وارد راهنمای آن می شوید و از همان ابتدا متوجه عباراتی می شوید مابین دو | قرار گرفته اند. در واقع این عبارات پیوند بین صفحات مختلف Help می باشند برای اینکه وارد هر یک از این صفحات شوید ۲ راه وجود دارد:

۱- نشانگر ماوس را روی هر یک از این پیوندها برده و کلید های ] + Ctrl را فشار دهید برای بازگشت به مکان اولیه از کلید های Ctrl+t استفاده کنید.

۲- دستور زیر را وارد کنید:

set mouse=a:

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

توجه:‌ این قسمت در مورد لینوکس صادق است و در ویندوز اندکی متفاوت است.

مطالعه بیشتر

ubuntu-ir wiki: VimHowTo (آخرین بروزآوری 02-12-2009 14:19:39 توسط MehdiHassanpour)