I love vim and often use it to write Python code. Here are some useful plugins and tools for building a delightful vim python environment, escpecially for Vim8:
As you can see, tmux is also one of my favourite tools in terminal.
Syntax Checking
If you use Vim8, w0rp/ale is a better option than syntastic, for it utilizes the async feature in Vim8, you will never get stuck due to the syntax checking. It’s similar to flycheck in emacs, which allows you to lint while you type.
(taken from ale)
Code Formatter
google/yapf can be used to format python code. Make a key mapping as bellow, then you can format your python code via <LocalLeader> =
.
autocmd FileType python nnoremap <LocalLeader>=:0,$!yapf<CR>
You can also take a look at Chiel92/vim-autoformat.
Sort Import
timothycrosley/isort helps you sort imports alphabetically, and automatically separated into sections. For example, use <LocalLeader>i
to run isort on your current python file:
autocmd FileType python nnoremap <LocalLeader>i:!isort %<CR><CR>
Or you can use its vim plugins: fisadev/vim-isort.
Auto Completion
Valloric/YouCompleteMe is a good way to provide code auto completion. If you think YCM is too huge to give a try, jedi-vim is an alternative. They all use jedi as their backend.
(taken from jedi-vim)
If use neovim, you can also try Shougo/deoplete.nvim.
Quick Run
If use Vim8, you can execute python file asynchronously by skywind3000/asyncrun.vim and output automatically the result to the quickfix window like this:
" Quick run via <F5>
nnoremap <F5>:call<SID>compile_and_run()<CR>
augroup SPACEVIM_ASYNCRUN
autocmd!" Automatically open the quickfix window
autocmd User AsyncRunStart call asyncrun#quickfix_toggle(15,1)
augroup ENDfunction!s:compile_and_run()
exec 'w'if&filetype=='c'
exec "AsyncRun! gcc % -o %<; time ./%<"elseif&filetype=='cpp'
exec "AsyncRun! g++ -std=c++11 % -o %<; time ./%<"elseif&filetype=='java'
exec "AsyncRun! javac %; time java %<"elseif&filetype=='sh'
exec "AsyncRun! time bash %"elseif&filetype=='python'
exec "AsyncRun! time python %"endifendfunction
For neovim, neomake/neomake is worthy of trying. Here is the description from neomake’s README:
It is intended to replace the built-in :make command and provides functionality similar to plugins like syntastic and dispatch.vim. It is primarily used to run code linters and compilers from within Vim, but can be used to run any program.
Another approach is to use TMUX. The idea is simple: it can split your terminal screen into two. Basically, you will have one side of your terminal using Vim and the other side will be where you run your scripts.
Enhance the default python syntax highlighting
python-mode/python-mode provides a more precise python syntax highlighting than the defaults. For example, you can add a highlighting for pythonSelf
.
hi pythonSelf ctermfg=68 guifg=#5f87d7 cterm=boldgui=bold
For more customized python syntax highlightings, please see space-vim: python Layer and syntax/python.vim in python-mode/python-mode .
Actually, python-mode contains tons of stuff to develop python applications in Vim, e.g., static analysis, completion, documentation, and more. (But personally, I prefer to obtain the functionalities by some other better plugins.)
Summary
There are also some neccessary general programming plugins, e.g., scrooloose/nerdcommenter for convenient commenter, Yggdroot/indentLine or nathanaelkane/vim-indent-guides for visually displaying indent levels in Vim, etc.
Although vim is great and many plugins are productive, IDE is still my first choice when it comes to refactoring code :).
For more details, please see space-vim, enable ycmd, syntax-checking, python, programming Layer , then you could get a nice vim environment for python like the screenshot. Hope it helpful.