20.08.13

Настраиваем Vim под Python

Сегодня я хочу рассказать вам, как я настраивал любимый всеми редактор Vim (который в одном режиме пищит, а в другом — все портит) для написания кода на Python. Статья расчитана на начинающих виммеров.
У меня получилась такая картинка:





.vimrc


Для начала, нужно установить некоторые параметры в ~/.vimrc. Привожу весь файл целиком, может кому-то будет полезно.

"Вырубаем режим совместимости с VI:
set nocompatible

"Включаем распознавание типов файлов и типо-специфичные плагины:
filetype on
filetype plugin on

"Настройки табов для Python, согласно рекоммендациям
set tabstop=4
set shiftwidth=4
set smarttab
set expandtab "Ставим табы пробелами
set softtabstop=4 "4 пробела в табе
"Автоотступ
set autoindent
"Подсвечиваем все что можно подсвечивать
let python_highlight_all = 1
"Включаем 256 цветов в терминале, мы ведь работаем из иксов?
"Нужно во многих терминалах, например в gnome-terminal
set t_Co=256

"Настройка omnicomletion для Python (а так же для js, html и css)
autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType css set omnifunc=csscomplete#CompleteCSS

"Авто комплит по табу
function InsertTabWrapper()
let col = col('.') - 1
if !col || getline('.')[col - 1] !~ '\k'
return "\"
else
return "\<c-p>"
endif
endfunction
imap <c-r>=InsertTabWrapper()"Показываем все полезные опции автокомплита сразу
set complete=""
set complete+=.
set complete+=k
set complete+=b
set complete+=t

"Перед сохранением вырезаем пробелы на концах (только в .py файлах)
autocmd BufWritePre *.py normal m`:%s/\s\+$//e ``
"В .py файлах включаем умные отступы после ключевых слов
autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class

""""Дальше мои личные настройки,
""""в принципе довольно обычные, может кому надо

"Вызываем SnippletsEmu(см. дальше в топике) по ctrl-j
"вместо tab по умолчанию (на табе автокомплит)
let g:snippetsEmu_key = "<C-j>"

" Копи/паст по Ctrl+C/Ctrl+V
vmap <C-C> "+yi
imap <C-V> "+gPi

colorscheme wombat256 "Цветовая схема
syntax on "Включить подсветку синтаксиса
set nu "Включаем нумерацию строк
set mousehide "Спрятать курсор мыши когда набираем текст
set mouse=a "Включить поддержку мыши
set termencoding=utf-8 "Кодировка терминала
set novisualbell "Не мигать
set t_vb= "Не пищать! (Опции 'не портить текст', к сожалению, нету)
"Удобное поведение backspace
set backspace=indent,eol,start whichwrap+=<,>,[,]
"Вырубаем черточки на табах
set showtabline=0
"Колоночка, чтобы показывать плюсики для скрытия блоков кода:
set foldcolumn=1

"Переносим на другую строчку, разрываем строки
set wrap
set linebreak

"Вырубаем .swp и ~ (резервные) файлы
set nobackup
set noswapfile
set encoding=utf-8 " Кодировка файлов по умолчанию
set fileencodings=utf8,cp1251 " Возможные кодировки файлов, если файл не в unicode кодировке,
" то будет использоваться cp1251



Плагины


Чтобы ощутить Power of Vim, необходимо воспользоваться плодами трудов предшественников-первопроходцев.
Для начала, если вы не сделали раньше, нужно поставить плагин Vimball - велосипедный архиватор для вимовских плагинов. Без этого велосипеда нам не поставить многих полезных плагинов. Качаем и распаковываем в ~/.vim/

Далее. Нам нужна клевая подсветка синтаксиса вместо дефолтной - для Python (и для Django - если хотите). Качаем и сливаем в ~/.vim/syntax/ (здесь и далее - если папки в вашей домашней директории нету, создавайте ее)

Автодополнение тоже лучше не дефолтное - качаем pythoncomplete.vim и заливаем в ~/.vim/autoload/. В .vimrc мы уже настроили комплит на Tab.

Если мы что то написали, мы должны это запустить?.. Качаем runscript.vim и кидаем его в~/.vim/plugin/. Он с кривыми концами строк, мы должны его поправить:
sudo apt-get install tofrodos #в бубунте
dos2unix ~/.vim/plugin/runscript.vim


Теперь открываем его в Vim и правим настройки:

"Путь к питону, исправляем виндовый
let s:PathToExecutable = '/usr/bin/python'

" Map keys to function calls
"Выполнить скрипт, который назначен "Главным"
if !hasmapto('RunScript')
nmap ExecuteScript
endif
"Назначить скрипт в буфере Главным
if !hasmapto('SetMainScript')
nmap SetMainScript
endif
"Сбросить назначение Главного скрипта
if !hasmapto('ClearMainScript')
nmap <S-F11> ClearMainScript
endif
"Показать/скрыть окно вывода
if !hasmapto('ToggleOutputWindow')
nmap ToggleOutputWindow
endif

Можно конечно настройки скрипта и в .vimrc прописать, но скрипт все равно кривой и его ковырять пришлось.

Теперь самое вкусное - SnippletsEmu - снипплеты. Это маленькие заготовки языковых конструкций. Вводишь for, нажимаешь кнопку (у меня в .vimrc ctrl-j), получается:

Нажимаешь еще раз кнопку, курсор перескакивает к следующему полю... Так очень удобно добавлять функции, классы, циклы, что угодно.
Ставится это добро (оно, кстати, очень похоже на функционал Textmate) из двух vba архивов: с плагином и с готовыми снипплетами. Открываем архив в vim, набираем:
:source %

И все, поставилось. Повторить со вторым архивом

Можно и свои снипплеты создавать, коммандой типа:
:Snippet клевоимячко Меня зовут <{фамилия}> <{имя}>. Зови меня <{имядлядрузей}>.


И исспользовать, набрав клевоимячко и нажав назначенную комбинацию.
Но функционал SnippletEmu велик, и это тема для следующей статьи

Так, вроде все есть, только не хватает - темы! Лично я рекоммендую desert256, но если не нравится - могу посоветовать поставить плагин ScrollColor.vim и сборник лучших тем.
Затем вызываем плагин коммандой
:COLOR

И выбираем тему.


Небольшой видеоролик про редактирование кода в vim.
Краткое содержание.
1. Использование аббревиатур.
2. Плагин MRU
3- Плагин tagbar
Сделано с помощью свободного редактора OpenShot — для изготовления видеороликов в домашних условиях он оказался вполне пригоден.



P.S. В комментариях советуют массу плагинов. Но их такое количество разных, что если у кого-то есть желание написать про них-я не против. Но моё время ограниченно и вынужден ограничиться самым, на мой взгляд, важным.