Vim中编辑Python的利器


最近偶然间发现了这篇文章Vim and Python - a Match Made in Heaven,标题读起来还挺押韵的哈。里面主要介绍了使用Vim编辑Python时的一些配置和插件,我试过后发现,的确很提高工作效率~当然,在折腾的过程中,我也遇到了一些问题,就记录在下面啦。

代码折叠

Python由于对缩进要求非常严格,所以在Vim中实现代码折叠只需要如下配置即可:

1
2
3
set foldmethod=indent
set foldlevel=99
nnoremap <space> za

这样,在需要折叠的函数里,Vim的normal模式下,按下空格键,就可以将这个函数折叠起来了,好清爽~

1
2
def handle(self, *app_labels, **options):
+--- 11 lines: from django.apps import apps------------------

再按下空格,又可以将函数展开。

关于SimpylFold

这篇文章中说,上面这种折叠方式有时会比预期中折叠更多的代码,所以推荐使用插件SimpylFold插件。但是我发现:

  1. 上面这种折叠方式在我目前来看,并未出现过度折叠的情况;
  2. 安装SimpylFold插件之后,打开较大的python文件的速度会非常非常慢。我有一个大概2000行的python文件,足足用了10s才打开,使用–startuptime查看启动时间,发现是first screen update消耗了过多的时间;删除此插件后就是秒开了。

所以这个插件的安装请慎重。

Vundle

Vundle是Vim管理插件的插件,和pathogen各有优劣。

Vundle的安装也很简单,首先:

1
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim

然后,在.vimrc文件的开头加入如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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

之后,添加插件只需要在vimrc中添加Plugin行即可。安装的话,也只需要打开Vim,输入:PluginInstall就可以自动安装啦。

代码自动补全YCM

神器插件YouCompleteMe出场~

实不相瞒,我之前写Python时用的自动补全都是Vim的Ctrl+n,非常原始吧。但是当我用了YCM之后,顿时就有鸟枪换炮的感觉!

首先使用Vundle安装YCM:

1
Bundle 'Valloric/YouCompleteMe'

然后在Vim中调用:PluginInstall,这里会卡在processing xxx一段时间,这时可以去泡杯咖啡,刷刷知乎^_^

这一步完成后,需要进入~/.vim/bundle/YouCompleteMe这个目录下面,然后通过插件提供的脚本进行编译安装。

1
./install.py --clang-completer

其中clang-completer表示对C-family语言的支持(可选)。

这时,你可能会和我一样,遇到如下错误信息:

1
subprocess.CalledProcessError: Command '['/usr/bin/python2', u'/home/yubo/.vim/bundle/YouCompleteMe/third_party/ycmd/build.py', '--clang-completer']' returned non-zero exit status 1

别着急,这是因为你没装cmake。直接通过apt-get安装cmake即可解决。

安装完成后,在.vimrc中进行如下配置:

1
2
3
nnoremap gl :YcmCompleter GoToDeclaration<CR>
nnoremap gf :YcmCompleter GoToDefinition<CR>
nnoremap gg :YcmCompleter GoToDefinitionElseDeclaration<CR>

这样,就可以通过快捷键gl、gf、gg进行各种定义跳转,比ctags准三条长安街~

最牛的是,现在在可以弹出自动补全列表的同时,还会在Vim中生成一个预览框,让我看到这个函数的用法!
Vim YCM

YCM还提供了对其他语言的自动补全支持,详细配置可以参考这篇文章,它对于C/C++的自动补全也是很出色的~

PEP8检查

首先使用pip安装flake8模块,然后使用Vundle安装如下两个插件:

1
2
Plugin 'scrooloose/syntastic'
Plugin 'nvie/vim-flake8'

之后使用Vim编辑Python文件就会自动检测是否符合PEP8已经简单的语法错误咯。


我的一个简单的.vimrc文件放在我的GitHub,有兴趣的读者可以自行查看。

转载请注明出处: http://blog.guoyb.com/2016/07/17/python-vim/

欢迎使用微信扫描下方二维码,关注我的微信公众号TechTalking,技术·生活·思考:
后端技术小黑屋

Comments