توی قسمت های اول و دوم گفتم چرا ویم خوبه و به چه دلایلی ازش استفاده میکنیم. شاید برای بعضی ها یه اجبار گاه گداری باشه، برای بعضی ها شبیه من یه فان باحال و یکی از ادیتورهای برنامه نویسی و برای بعضی ها بهترین ادیتور دنیا. توی این قسمت سعی می کنیم با استفاده از پلاگین ها و دیدن چند ترفند باحال ادیتور ویم، سیستم رو بهینه کنیم برای برنامه نویسی، بخصوص پایتون. پایه اصلی این نوشته این مطلب است با تغییراتی و اضافهها و کم هایی بر اساس چیزی که من باهاش راحتم و استفاده میکنم.
لینک تنظیم ادیتور ویم برای برنامه نویسی در آپارات و یوتیوب.
توی قسمت های قبلی که با ویم کار کردیم پس منطقا نصب شده (: اما بحث اینه که انتظار می ره ویم شما نسبتا جدید باشه، حداقل بالاتر از ۷.۳.
➜ ~ vim --version VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Apr 12 2020 17:46:58)
اگر روی مک هستین و ورژن شما پایینتر است، شاید با brew update و brew install vim بتونی وضع رو بهتر کنین. روی لینوکس ها احتمالا به اندازه کافی به روز هستین.
ویم الان یه شبیه یه پلتفرم شده که روش کلی پلاگین نصب می کنین و کارهایی رو می کنه که شما دوست دارین. نصب پلاگینهای از طریق مدیراکستنشها انجام میشه که یکی از مرسومهاش Vundle است. نصبش ساده است. واندل رو کلون می کنینش توی تنظیمات پلاگین های ویم؛ یه چنین چیزی:
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
حالا برای شروع تنظیمات کافیه یه فایل به اسم .vimrc توی هوم درست کنین:
touch ~/.vimrc
و توش تنظیمات واندل رو اضافه کنین:
set nocompatible " required filetype off " required " set the runtime path to include Vundle and initialize set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() " alternatively, pass a path where Vundle should install plugins "call vundle#begin('~/some/path/here') " let Vundle manage Vundle, required Plugin 'gmarik/Vundle.vim' " add all your plugins here (note older versions of Vundle " used Bundle instead of Plugin) " ... " All of your Plugins must be added before the following line call vundle#end() " required filetype plugin indent on " required set encoding=utf-8
بقیه کارها واضحه: اضافه کردن پلاگین ها و تنظیم کردن چیزها و یاد گرفتن شورتکات ها.. الان اگر برین توی ویم و این دستور رو اجرا کنین، واندل پلاگین هایی که بهش گفتین رو براتون نصب یا به روز می کنه.
:PluginInstall
حالا وقتشه که قدم به قدم پیش بریم.
قبلا هم گفتم. خوبه فیچرهای چیزهایی که ازشون استفاده می کنین رو بگیریم. معمولا آدم ها به شکل تجربی یکسری فیچر اولیه رو یاد می گیرن تا کارشون راه بیافته و بعد حرفه ای تر نمی شن. خوبه اگر از چیزی استفاده می کنین، کم کم فیچرهای مناسبش رو یاد بگیرین. مثلا در مورد ویم، استفاده کمتر از ماوس یا استفاده بیشتر از :sp و :vs و کامندهایی که حرفشون رو زدیم مثل بافرها و ..
تا کردن؟ انگلیسی ها می گن fold. در حالت عادی با za فولد می شد ولی خیلی ها می ذارن روی space.
" Enable folding set foldmethod=indent set foldlevel=99
البته دقت کنین که فولد بر اساس ایندنت انجام می شه. برای پیشرفتهتر کردن با درک زبان و … SimpylFold رو سرچ کنین.
برای ایندنت کردن بر اساس پپ۸، اینها رو اضافه کنین:
au BufNewFile,BufRead *.py \set tabstop=4 \set softtabstop=4 \set shiftwidth=4 \set textwidth=79 \set expandtab \set autoindent \set fileformat=unix
و برای ایندنت خوب اتوماتیک:
Plugin 'vim-scripts/indentpython.vim'
و چنین چیزی برای مشخص کردن اسپیس های اضافی
au BufRead,BufNewFile *.py,*.pyw,*.c,*.h match BadWhitespace /\s\+$/ highlight BadWhitespace ctermbg=red guibg=darkred
اتوکامپلیت ایده ها و شکل های مختلفی داره. مثلا ممکنه فانکشن های اصلی رو بدونه یا ممکنه متغیرها رو زیر نظر بگیره و … گزینه اصلی خیلی ها برای مجموعه ای از زبانها ِYouCompleteMe است که باید مستقل نصبش رو پیش برین. با این به واندل اضافه اش کنید:
Bundle 'Valloric/YouCompleteMe'
و بعد از نصبش چند تا تغییر ریز هم بدیم:
let g:ycm_autoclose_preview_window_after_completion=1 map g :YcmCompleter GoToDefinitionElseDeclaration
معلومه که ویم درکی از ویرچوال انوها نداره. برای ایجاد کردن این درک می تونیم اینکار رو بکنیم:
"python with virtualenv support py << EOF import os import sys if 'VIRTUAL_ENV' in os.environ: project_base_dir = os.environ['VIRTUAL_ENV'] activate_this = os.path.join(project_base_dir, 'bin/activate_this.py') execfile(activate_this, dict(__file__=activate_this)) EOF
پلاگین داریم دیگه...
Plugin 'vim-syntastic/syntastic' Plugin 'nvie/vim-flake8' let python_highlight_all=1 syntax on
یک نگاه خودتون بندازین... سخته انتخاب کرده و من هی عوض می کنم. ولی در نهایت با
colorscheme desert
اوه اوه.. بعضی ها عاشق اینن بعضی ها نمی دونن اصلا چرا هست! نرد تری مرسمترین است:
Plugin 'scrooloose/nerdtree' Plugin 'jistr/vim-nerdtree-tabs' let NERDTreeIgnore=['\.pyc$', '\~$'] "ignore files in NERDTree
می تونین با :NERDTree فعالش کنین ، با o در بافر جدید باز کنین. با t در تب جدید، با i در اسپلیت افقی و با s در معودی. p می ره دایرکتوری بالا و r ریفرش می کنه. بقیه اش؟ ? (: بستن؟ :NERDTreeClose
مثلا
set number set showmatch set history=1000 set undolevels=1000 set wildignore=*.swp,*.bak,*.pyc set visualbell set noerrorbells
و پلاگین هایی مثل
Plugin 'Lokaltog/powerline', {'rtp': 'powerline/bindings/vim/'}