تقریبا تمام مدتی که به صورت جدی برنامهنویسی کردم از Vim استفاده کردم، توی این مدت خیلی چیزا در مورد Vim یاد گرفتم، فهمیدم که بعضی از امکاناتش رو دوست دارم و میخوام نگه دارم، بعضیها رو کلا نمیخوام و بعضیها رو اگه یجور دیگه بودن دوست داشتم. تا حالا چندین بار دوستام ازم خواستن که فایل تنظیمات Vim خودم رو بهشون بدم، تصمیم گرفتم که یه پست در موردش بنویسم (همراه با کمی توضیح) که اگر vimrc. رو گم کردم، یه کپی اینجا داشته باشم (هرچند که این همش نیست، بعضی از تنظیماتی که استفاده میکنم خیلی احمقانه هستن و بعضیها کاملا اختصاصی، مثل مسیر tag های یه پروژه)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
set nocompatible | |
set expandtab | |
set shiftwidth=4 | |
set softtabstop=4 | |
set tabstop=4 | |
set backspace=indent,eol,start | |
set t_Co=256 | |
set number | |
set autoindent | |
set smartindent | |
set incsearch | |
set nohlsearch | |
set ruler | |
set hidden | |
set noerrorbells | |
set novisualbell | |
set fdm=marker | |
set viminfo='10,\"100,:20,%,n~/.viminfo | |
set wildmenu | |
set wildmode=list:longest | |
set ignorecase | |
set smartcase | |
set title | |
set shortmess=atI | |
filetype on | |
filetype plugin on | |
filetype indent on | |
syntax on |
۱. غیرفعال کردن سازگاری با vi (اگر میخواستم از vi استفاده کنم، که Vim رو اجرا نمیکردم ;)
نکته: ۴ (۲ تا ۵) نکته زیر کاملا به Coding Styles شما و پروژهایی که در اون مشارکت میکنید وابسته هست، مثلا من ترجیح میدم که بهجای Tab، از Space استفاده کنم، اینجوری کد من که مثلا برای طول هر خط ۷۸ کاراکتر نوشته شده، روی دستگاه من که هر Tab معادل ۴ تا Space هست همونجوری نشون داده میشه که روی یه Vim که هر Tab معادل ۸تا کاراکتر هست. اما بعضی از پروژهها (مثل کرنل لینوکس) استفاده از Tab رو ترجیح میدن، پس قبل از فرستادن Patch به Upstream حتما Coding Styles اون پروژه رو مطالعه کنید.
۲. با استفاده از expandtab، هر Tab رو با استفاده از تعدادی Space جایگزین میکنید، مثلا با یکبار زدن Tab به جای اینکه یه tab در مد insert اضافه بشه، چندین Space اضافه میشه. (در حالت پیشفرض این خصوصیت غیرفعال هست، با توجه به نکته نوشته شده در بالا، انتخاب کنید که آیا این تنظیم را نیاز دارید یا نه)
۳. تعداد Space هایی که برای هر مرحله از indent استفاده میشه.
۴. تعداد Space هایی که در هنگامی که در مد insert قرار دارید، به ازای هربار فشردن Tab، یا Backspace اضافه یا کم میشه.
۵. هرچند Space یک Tab محسوب بشه.
۶. اینکه Backspace در مد insert چجوری کار کنه، حالتی که من استفاده میکنم کاملترین حالته، اینکه هم در انتها و ابتدای خط (eol و start) و هم در حالت indent کار میکنه.
۷. تعداد رنگهای مورد استفاده در Vim (کاملا بسته به نوع شبیهساز ترمینال و colorscheme مورد استفاده است).
۸. نمایش شماره خطوط
۹. وضعیت indent خط فعلی به خط بعد نیز کپی میشود (یعنی خط بعد متاثر از وضعیت خط قبل از خود باشد)
۱۰. در هنگامی که به زبانهای برنامهنویسی شبه C کد مینویسید، به صورت هوشمندانه خطوط را مرتب میکند (مثلا یک مرحله indent بیشتر بعد از })
۱۱. همزمان با کامل شدن مورد جستجو، جستجو رو انجام میده، در حالت پیشفرض پس از کامل شدن متن مورد جستجو و وارد کردن آن موارد پیدا شده نمایشن داده میشوند.
۱۲. من دوست ندارم موارد پیدا شده بر اساس جستجوی انجام شده هایلایت بشه (کاملا سلیقهایی)
۱۳. نمایش سطر و ستون محل فعلی کرسر.
۱۴. پنهان کردن (نه کشتن!) Bufferایی که بسته میشه.
۱۵ و ۱۶. من نه دوست دارم در مواقع خطا صدای بوق بشنوم، نه اینکه صفحه نمایش flash کنه.
۱۷. نحوه folding، که من استفاده از markerهای خود Vim برای folding رو ترجیح میدم.
۱۸. وقتی که با Vim کار میکنید، خیلی از متون وارد register میشن، فایلهای مورد استفاده در bufferها لیست میشن، یهسری خطوط مارک میشن و ... که همگی مفیدن، اما متاسفانه همه این موارد پس از بسته شدن Vim از دست میرن، اگر که دوست دارید این موارد هنگامی که مجددا Vim رو باز میکنید همچنان در دسترس باشند، باید از امکانات viminfo. استفاده کنید. این خط به vim میگه که ۱۰ فایل ویرایش شده آخر را به همراه مارکهای آنها نگه دارد، ۱۰۰خط آخر را در register نگه دارد، ۲۰ دستور آخر را که در مد دستور وارد شدهاند حفظ کند، اگر که در هنگام فراخوانی Vim فایل خاصی مشخص نشده باشد، کل بافر قبلی را بارگذاری کند و در نهایت نام فایلی که تمامی این اطلاعات باید در آن ذخیره شوند و در هنگام فراخوانی مجدد Vim اطلاعات این فایل بازیابی شوند.
۱۹ و ۲۰. تکمیل فرامین در مد فرمان (با استفاده از Tab) و درصورتی که چندین مورد یافت شد، همگی نمایش داده شوند و تا هنگام تکمیل طولانیترین گزینه فعال باشد.
۲۱ و ۲۲. کوچک یا بزرگ بودن حروف در هنگام جستجو نادیده گرفته میشوند مگر اینکه عبارت جستجو حاوی یک کاراکتر با حروف بزرگ باشد.
۲۳. Vim میتونه عنوان پنجره terminal باز شده رو بازنویسی کنه.
۲۴. غیرفعال کردن خیلی از promptهایی که شما مجبورید برای رهایی از دستشون Enter رو فشار بدید، مثلا پیغامی که در هربار اجرای Vim نمایش داده میشه (توجه: اون a خیلی چیزا رو غیرفعال میکنه!).
۲۶ تا ۲۹. استفاده از امکانات بسیار مفید Vim در هنگام ویرایش فایلهایی که افزونههای مرتبط به آنها نصب شده باشد، مثلا رنگ کردن کد، auto-completion و ....