为Python设置Vim

62

我非常喜欢Emacs编辑器来写Python代码,因为它有很聪明的Tab键缩进功能。例如当我有这样的代码:

def foo():
    if bar:
         blah
         [b]eep

如果我在光标上(在beep的b上)按tab键,它不会插入一个新的制表符导致语法错误,但它将在beep可能存在的不同级别之间进行切换。有没有办法在Vim中实现这种效果?

8个回答

93

总的来说,vim是一个非常强大的正则语言编辑器(虽然宏可以扩展它,但我们现在不考虑它)。这是因为vim是基于ed的薄层,而ed不过是一个能够处理正则表达式的行编辑器。Emacs的优势在于它是建立在ELisp之上的,因此它具备轻松解析复杂语法和执行像你上面分享的缩进技巧的能力。

说实话,我从未能深入探究过emacs,因为在我的vim洞穴中冥想简直是一种享受。有了这个前提,让我们开始吧。

入门

Janus

对于初学者,我强烈推荐安装预制的Janus插件(顺便说一下,这个名字来自一个以Janus Vim命名的星际迷航剧集)。如果你想要快速获取一个vim IDE,那么它是最划算的选择。

我自己没有经常使用它,但我看到其他人用得很开心,而我的当前设置也很大程度上借鉴了一个旧版的Janus构建。

Vim Pathogen

否则,你可以自己探索一下!如果你想看到vim插件的宇宙,我强烈推荐安装vim pathogen

它是一种包管理器。一旦安装了它,你就可以在~/.vim/bundle目录中使用git clone命令克隆包,然后它们就会自动安装。不再需要插件的安装、维护或卸载麻烦了!

你可以从GitHub页面运行下面的脚本来安装pathogen:

mkdir -p ~/.vim/autoload ~/.vim/bundle; \
curl -so ~/.vim/autoload/pathogen.vim \
    https://raw.github.com/tpope/vim-pathogen/HEAD/autoload/pathogen.vim

有用的链接

以下是我发现并喜欢的一些扩展vim的链接:


8
第一个链接是事实上的“将Vim打造成Python集成开发环境”的指南,至今为止我见过的最好的指南。 - Walter
1
第一个链接真的非常深入,对于Python和Vim来说充满了好东西。谢谢! - Bodhi
1
我对Janus持有不同意见。我曾经尝试过,但是它带来的麻烦超过了价值。它安装了比你需要的更多的东西,因此你从未真正学会它。而且,如果你不使用Mac,你仍然需要在其中修复一些问题(一些命令使用Mac苹果键)。 - Makis
1
第一个链接已损坏。 - Iqbal
3
寻找第一个链接的人可以访问:https://web.archive.org/web/20151210012212/http://www.sontek.net/blog/2011/05/07/turning_vim_into_a_modern_python_ide.html - Ashish

26

对于那些在2013年夏天左右到达的人,我相信这个帖子有些过时了。

我遵循了这篇指南,它推荐使用Vundle而不是Pathogen。经过一天的使用,我发现安装插件很容易。

klen/python-mode插件值得特别一提。它提供了pyflakes和pylint等其他功能。

我刚开始使用Valloric/YouCompleteMe,我很喜欢它。它具有C语言自动补全功能,由于jedi集成,Python也表现出色。因此,它可能会取代jedi-vim,如此讨论 /davidhalter/jedi-vim/issues/119

最后,浏览/carlhuda/janus提供的插件是一个好的指南,可以找到一些你可能不知道的有用脚本,例如NerdTree、vim-fugitive、syntastic、powerline、ack.vim、snipmate等。

以上所有的'{}/{}'在github上都能找到,你可以通过谷歌轻松找到它们。


在2017年,我发现VIM 8的本地软件包管理对我来说已经足够了。 - Dzamo Norton

16

将以下内容放入你的.vimrc文件中

autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class
autocmd BufRead *.py set nocindent
autocmd BufWritePre *.py normal m`:%s/\s\+$//e ``
filetype plugin indent on

另请参阅详细说明

我个人在处理复杂任务时使用JetBrain的PyCharm,并结合IdeaVIM插件,对于简单编辑,只需要添加到.vimrc的内容就足够了。


详细的说明中没有提到您建议的行。我还不得不添加autocmd BufRead *.py set shiftwidth=4才能在按回车时获得4个空格的缩进。 - Harry Moreno
autocmd BufRead *.py set ts=4 可以让你以 4 个空格为单位进行删除。 - Harry Moreno

3

2
在Linux下,我所使用的是John Anderson(sontek)的指南,您可以在此链接中找到。然而,我作弊了,只是从他的Git存储库中使用了他简单的配置设置:
git clone -b vim https://github.com/sontek/dotfiles.git

cd dotfiles

./install.sh vim

截至今日,他的配置相当不错。


我需要修改这个答案:你需要克隆vim分支,因为Sontek决定使用emacs。'git clone -b vim https://github.com/sontek/dotfiles.git'。如果你错误地克隆了主分支,请执行'./install.sh restore',重新启动你的机器,然后一切都会好起来。 - Will Sams

2

@Baron:谢谢你的提醒;我已经在我的网站Persagen.com上重新发布了那些文件。 - Victoria Stuart

1

有一段时间前,我安装了Valloric/YouCompleteMe,我发现它真的非常棒。它可以为文件路径、函数名、方法、变量名提供自动补全......与davidhalter/jedi-vim一起,使得vim在Python编程方面表现出色(现在唯一缺少的是一个lint程序)。


0
一个非常好用的插件管理系统。附带的vimrc文件已经足够适合Python编程,并且可以轻松地根据您的需求进行配置。请参见http://spf13.com/project/spf13-vim/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接