Делаем Python IDE из Vim

Я люблю Vim и зачастую использую его, когда пишу Python-код. Поделюсь с вами несколькими полезными плагинами и утилитами для создания полноценного Python IDE используя Vim 8.

Делаем Python IDE из Vim
Как вы наверное заметили по скриншоту терминала, я так же использую tmux. Считаю его очень удобным.

Проверка синтаксиса

Многие используют syntastic для проверки синтаксиса, но я рекомендую попробовать w0rp/ale(Asynchronous Lint Engine) это плагин для NeoVim и Vim 8, реализующий линтинг, аналогично flycheck в emacs, работает «на лету», вы печатаете — он проверяет.
Делаем Python IDE из Vim

Форматирование кода

Для форматирования python-кода я использую google/yapf. Сделайте привязку клавиш к yapf через =.
autocmd FileType python nnoremap = :0,$!yapf
Можете ещё попробовать Chiel92/vim-autoformat.

Сортировка import

timothycrosley/isort позволяет сортировать в алфавитном порядке import, и автоматически разделяет на секции. Например, используйте i для выполнения isort на вашем текущем файле python:
autocmd FileType python nnoremap i :!isort {33d8302486bd10b0fde64d2037652320e6f176a736d71849c0427b0d7398501a}
Или можете для этого использовать этот Vim плагин: fisadev/vim-isort.

Автодополнение

Valloric/YouCompleteMe отличный вариант автодополнений. Если вы считаете, что YouCompleteMe слишком громоздкий, попробуйте jedi-vim, как альтернативу. Они оба используют jedi в качестве бэкенда .

Делаем Python IDE из Vim
Если вы используете neovim, можете попробовать для этих целей Shougo/deoplete.nvim.

Быстрый запуск

Если вы используете Vim8, то можете асинхронно исполнять файлы с помощью skywind3000/asyncrun.vim и на выходе автоматически получите результат вроде этого:
" Quick run via
nnoremap :call compile_and_run()

augroup SPACEVIM_ASYNCRUN
autocmd!
" Automatically open the quickfix window
autocmd User AsyncRunStart call asyncrun#quickfix_toggle(15, 1)
augroup END

function! s:compile_and_run()
exec 'w'
if &filetype == 'c'
exec "AsyncRun! gcc {33d8302486bd10b0fde64d2037652320e6f176a736d71849c0427b0d7398501a} -o {33d8302486bd10b0fde64d2037652320e6f176a736d71849c0427b0d7398501a}<; time ./{33d8302486bd10b0fde64d2037652320e6f176a736d71849c0427b0d7398501a}<" elseif &filetype == 'cpp' exec "AsyncRun! g++ -std=c++11 {33d8302486bd10b0fde64d2037652320e6f176a736d71849c0427b0d7398501a} -o {33d8302486bd10b0fde64d2037652320e6f176a736d71849c0427b0d7398501a}<; time ./{33d8302486bd10b0fde64d2037652320e6f176a736d71849c0427b0d7398501a}<" elseif &filetype == 'java' exec "AsyncRun! javac {33d8302486bd10b0fde64d2037652320e6f176a736d71849c0427b0d7398501a}; time java {33d8302486bd10b0fde64d2037652320e6f176a736d71849c0427b0d7398501a}<" elseif &filetype == 'sh' exec "AsyncRun! time bash {33d8302486bd10b0fde64d2037652320e6f176a736d71849c0427b0d7398501a}" elseif &filetype == 'python' exec "AsyncRun! time python {33d8302486bd10b0fde64d2037652320e6f176a736d71849c0427b0d7398501a}" endif endfunction

Для neovim, можете использовать neomake/neomake. Вот описание из README neomake:

Он предназначен для замены встроенной комманды :make и предоставляет функциональные возможности, аналогичные таким плагинам как syntastic и dispatch.vim. В основном используется для запуска кода линтеров и компиляторов из Vim, но может быть использован для запуска любой программы.

Другой, довольно удобный способ, к которому я прибегаю, заключается в использовании Tmux. Идея проста: он разделяет экран эмулятора терминала на две части. В одной из них будет запущен Vim, а в другой, вы запускаете ваши сценарии.
Делаем Python IDE из Vim

Расширяем стандартную подсветку синтаксиса python

Для этой цели используйте python-mode/python-mode. Например, вы можете добавить подсветку для pythonSelf .
hi pythonSelf ctermfg=68 guifg=#5f87d7 cterm=bold gui=bold
Делаем Python IDE из Vim
Если желаете сильнее кастомизировать подсветку, можете использовать space-vim: python Layer и syntax/python.vim in python-mode/python-mode .

На самом деле, python-mode содержит тонны всякого добра для разработки в Vim, например, статический анализ, автодополнения, документация и многое другое. (Но лично я предпочитаю, функциональные возможности сторонних плагинов.)

Подытожим

Есть также необходимые плагины общего программирования, такие как scrooloose/nerdcommenter для удобного комментирования, Yggdroot/indentLine or nathanaelkane/vim-indent-guides для визуального отображения отступов в Vim и другие.

Делаем Python IDE из VimВ целом, vim великолепное приложение и имеет массу отличных плагинов способных облегчить жизнь, потому вопрос выбора IDE для меня не возникает.:)
Можете еще присмотреться к space-vim, активировать ycmd, syntax-checking, python и программируемые слои , на выходе получите тоже что на скриншоте слева.

Leave a Comment