تنظیم ادیتور ویم برای برنامه نویسی [پایتون]

توی قسمت های اول و دوم گفتم چرا ویم خوبه و به چه دلایلی ازش استفاده می‌کنیم. شاید برای بعضی ها یه اجبار گاه گداری باشه، برای بعضی ها شبیه من یه فان باحال و یکی از ادیتورهای برنامه نویسی و برای بعضی ها بهترین ادیتور دنیا. توی این قسمت سعی می کنیم با استفاده از پلاگین ها و دیدن چند ترفند باحال ادیتور ویم، سیستم رو بهینه کنیم برای برنامه نویسی،‌ بخصوص پایتون. پایه اصلی این نوشته این مطلب است با تغییراتی و اضافه‌ها و کم هایی بر اساس چیزی که من باهاش راحتم و استفاده می‌کنم.

لینک تنظیم ادیتور ویم برای برنامه نویسی در آپارات و یوتیوب.

نصب خود ویم

توی قسمت های قبلی که با ویم کار کردیم پس منطقا نصب شده (: اما بحث اینه که انتظار می ره ویم شما نسبتا جدید باشه، حداقل بالاتر از ۷.۳.

➜  ~ 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/'}