本文由编程派-EarlGrey翻译,原文出自realpython,是Vim的爱好者专门针对利用Sublime Text 3设置Python IDE一文所写。译者本人也是依照Sublime Text那篇文章配置的开发环境,但一直对Vim做为神器的美名很是仰慕,又看到了一篇这么全面的配置文章,以为有必要翻译过来与你们分享,想必能够省却不少本身研究如何配置的时间。
我注意到,有人在realpython.com宣扬Sublime Text 3。做为公司的资深开发人员(呃,也就是老古董),我以为有义务介绍一个真正的Python开发环境给你们——我要推荐的固然就是Vim了。不错,Vim编辑器无处不在,速度快,历来不会崩溃。而且,它能作任何事情!
不过,不利之处也有,就是Vim配置起来很让人头疼。可是,别担忧,本文将告诉你如何配置一个强大的Vim环境,专门用于每天捣鼓Python开发。
下面是最终效果预览。
若是想充分地利用好本文,你应该对如何使用Vim和它的命令模式至少有一个基本的了解。若是你是初学者,你能够经过vim-adventure或者openvim网站学习。在继续阅读本文以前,请花点时间浏览那两个网站的内容。
安装
由于许多Unix衍生系统已经预装了Vim,咱们首先要确认编辑器是否成功安装:
vim --version
若是已经安装了,你应该看到相似下面的文字:
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Nov 5 2014 21:00:28) Compiled by root@apple.com Normal version without GUI. Features included (+) or not (-): -arabic +autocmd -balloon_eval -browse +builtin_terms +byte_offset +cindent -clientserver -clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments -conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con +diff +digraphs -dnd -ebcdic -emacs_tags +eval +ex_extra +extra_search -farsi +file_in_path +find_in_path +float +folding -footer +fork() -gettext -hangul_input +iconv +insert_expand +jumplist -keymap -langmap +libcall +linebreak +lispindent +listcmds +localmap -lua +menu +mksession +modify_fname +mouse -mouseshape -mouse_dec -mouse_gpm -mouse_jsbterm -mouse_netterm -mouse_sysmouse +mouse_xterm +multi_byte +multi_lang -mzscheme +netbeans_intg -osfiletype +path_extra -perl +persistent_undo +postscript +printer -profile +python/dyn -python3 +quickfix +reltime -rightleft +ruby/dyn +scrollbind +signs +smartindent -sniff +startuptime +statusline -sun_workshop +syntax +tag_binary +tag_old_static -tag_any_white -tcl +terminfo +termresponse +textobjects +title -toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo +vreplace +wildignore +wildmenu +windows +writebackup -X11 -xfontset -xim -xsmp -xterm_clipboard -xterm_save system vimrc file: "$VIM/vimrc" user vimrc file: "$HOME/.vimrc" user exrc file: "$HOME/.exrc" fall-back for $VIM: "/usr/share/vim" Compilation: gcc -c -I. -D_FORTIFY_SOURCE=0 -Iproto -DHAVE_CONFIG_H -arch i386 -arch x86_64 -g -Os -pipe Linking: gcc -arch i386 -arch x86_64 -o vim -lncurses
在这一步,你要确保已经知足如下两点要求:
-
Vim编辑版本应该大于7.3。
-
支持Python语言。在所选编辑器的功能中,确保你看到了
+python
。
若是知足上述要求,接下来能够安装Vim扩展了。若是不知足,则须要安装/升级。
OS X
若是没有Homebrew,建议立刻安装,并运行:
brew update brew install vim
Unix衍生系统
Debian或Ubuntu系统,可使用下面的代码:
sudo apt-get remove vim-tiny apt-get update apt-get install vim
若是是其余版本的Linux系统,请查阅相应版本包管理器的文档。不清楚的话,能够先阅读这篇文章:安装Vim
Windows
Windows系统下安装Vim有不少种方法。请查阅官方文档。
验证安装
确保你已经安装了7.3版本以上、支持Python的Vim编辑器。你能够再次运行vim --version
进行确认。若是你想知道Vim中使用的Python版本,你能够在编辑器中运行:python import sys; print(sys.version)
。
2.7.6 (default, Sep 9 2014, 15:04:36) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)]
这行命令会输出你的编辑器当前的Python版本。若是报错,那么你的编辑器就不支持Python语言,须要重装或从新编译。
Vim编辑器安装完成后,咱们来看看如何将其设置为Python开发的强大环境。
Vim扩展
Vim自己可以知足开发人员的不少需求,可是它的可扩展性也极强,而且已经有一些杀手级的扩展,可让Vim拥有“现代”集成开发环境的特性。因此,你所须要的第一件东西就是一个好用的扩展管理器。
Vim的扩展一般也被成为bundle或插件。
Vundle
Vim有多个扩展管理器,可是咱们强烈推荐Vundle。你能够把它想象成Vim的pip。有了Vundle,安装和更新包这种事情不费吹灰之力。
咱们如今来安装Vundle:
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
该命令将下载Vundle插件管理器,并将它放置在你的Vim编辑器bundles文件夹中。如今,你能够经过.vimrc配置文件来管理全部扩展了。
将配置文件添加到你的用户的home文件夹中:
touch ~/.vimrc
接下来,把下来的Vundle配置添加到配置文件的顶部:
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
这样,你就完成了使用Vundle前的设置。以后,你就能够在配置文件中添加但愿安装的插件,而后打开Vim编辑器,运行下面的命令:
:PluginInstall
这个命令告诉Vundle施展它的魔法——自动下载全部的插件,并为你进行安装和更新。
对于Windows用户,请查阅Windows安装指南。
开始打造IDE吧
本文不可能列举Vim的所有功能,只能快速介绍一些Vim自带的强大功能,它们对于Python开发来讲是很是有用的。
扔掉鼠标
或许,Vim编辑器最重要的功能就是它不要求使用鼠标(除了GUI版本外)。一开始,你可能会以为这是个很是糟糕的作法,可是只要你投入时间——是的,这很花时间——学习快捷组合键,就能够大幅提高工做流的速度。
分割布局(Split Layouts)
使用:sv <filename>
命令打开一个文件,你能够纵向分割布局(新文件会在当前文件下方界面打开),使用相反的命令:vs <filename>
, 你能够获得横向分割布局(新文件会在当前文件右侧界面打开)。
你还能够嵌套分割布局,因此你能够在分割布局内容再进行分割,纵向或横向均可以,直到你满意为止。众所周知,咱们开发时常常须要同时查看多个文件。
专业贴士:记得在输入完:sv
后,利用tab补全功能,快速查找文件。
专业贴士:你还能够指定屏幕上能够进行分割布局的区域,只要在.vimrc
文件中添加下面的代码便可:
set splitbelow set splitright
专业贴士:想要不使用鼠标就切换分割布局吗?只要将下面的代码添加到.vimrc
文件中,你就能够经过快捷组合键进行切换。
"split navigations nnoremap <C-J> <C-W><C-J> nnoremap <C-K> <C-W><C-K> nnoremap <C-L> <C-W><C-L> nnoremap <C-H> <C-W><C-H>
组合快捷键:
-
Ctrl-j
切换到下方的分割窗口 -
Ctrl-k
切换到上方的分割窗口 -
Ctrl-l
切换到右侧的分割窗口 -
Ctrl-h
切换到左侧的分割窗口
换句话说, 按Ctrl
+Vim的标准移动键,就能够切换到指定窗口。
等等,
nnoremap
是什么意思?——简单来讲,nnoremap
将一个组合快捷键映射为另外一个快捷键。一开始的n
,指的是在Vim的正常模式(Normal Mode)下,而不是可视模式下从新映射。基本上,nnoremap <C-J> <C-W><C-j>
就是说,当我在正常模式按下<C-J>时,进行<C-W><C-j>操做。更多信息请看这里。
缓冲区(Buffers)
虽然Vim支持tab操做,仍有不少人更喜欢缓冲区和分割布局。你能够把缓冲区想象成最近打开的一个文件。Vim提供了方便访问近期缓冲区的方式,只须要输入:b <buffer name or number>
,就能够切换到一个已经开启的缓冲区(此处也可以使用自动补全功能)。你还能够经过ls
命令查看全部的缓冲区。
专业贴士: 在:ls
命令输出的最后,Vim会提示“敲击Enter继续查看”,这时你能够直接输入:b <buffer name>
,当即选择缓冲区。这样能够省掉一个按键操做,也没必要去记忆缓冲区的名字。
代码折叠(Code Folding)
大多数“现代”集成开发环境(IDE)都提供对方法(methods)或类(classes)进行折叠的手段,只显示类或方法的定义部分,而不是所有的代码。
你能够在.vimrc
中添加下面的代码开启该功能:
" Enable folding set foldmethod=indent set foldlevel=99
这样就能够实现,可是你必须手动输入za
来折叠(和取消折叠)。使用空格键会是更好的选择。因此在你的配置文件中加上这一行命令吧:
" Enable folding with the spacebar nnoremap <space> za
如今你能够轻松地隐藏掉那些当前工做时不须要关注的代码了。
第一个命令,set foldmethod=ident
会根据每行的缩进开启折叠。可是这样作会出现超过你所但愿的折叠数目。可是别怕,有几个扩展就是专门解决这个问题的。在这里,咱们推荐SimplyFold。在.vimrc
中加入下面这行代码,经过Vundle进行安装:
Plugin 'tmhedberg/SimpylFold'
不要忘记执行安装命令:
:PluginInstall
专业贴士: 但愿看到折叠代码的文档字符串?
let g:SimpylFold_docstring_preview=1
Python代码缩进
固然,想要代码折叠功能根据缩进状况正常工做,那么你就会但愿本身的缩进是正确的。这里,Vim的自带功能没法知足,由于它实现不了定义函数以后的自动缩进。咱们但愿Vim中的缩进能作到如下两点:
-
首先,缩进要符合PEP8标准。
-
其次,更好地处理自动缩进。
PEP8
要支持PEP8风格的缩进,请在.vimrc
文件中添加下面的代码:
au BufNewFile,BufRead *.py \ set tabstop=4 \ set softtabstop=4 \ set shiftwidth=4 \ set textwidth=79 \ set expandtab \ set autoindent \ set fileformat=unix
这些设置将让Vim中的Tab键就至关于4个标准的空格符,确保每行代码长度不超过80个字符,而且会以unix格式储存文件,避免在推送到Github或分享给其余用户时出现文件转换问题。
另外,对于全栈开发,你能够设置针对每种文件类型设置au
命令:
au BufNewFile,BufRead *.js, *.html, *.css \ set tabstop=2 \ set softtabstop=2 \ set shiftwidth=2
自动缩进
自动缩进有用,可是在某些状况下(好比函数定义有多行的时候),并不老是会达到你想要的效果,尤为是在符合PEP8标准方面。咱们能够利用indentpython.vim插件,来解决这个问题:
Plugin 'vim-scripts/indentpython.vim'
标示没必要要的空白字符
咱们但愿避免出现多余的空白字符。可让Vim帮咱们标示出来,使其很容易发现并删除。
au BufRead,BufNewFile *.py,*.pyw,*.c,*.h match BadWhitespace /\s\+$/
这会将多余的空白字符标示出来,极可能会将它们变成红色突出。
支持UTF-8编码
大部分状况下,进行Python开发时你应该使用UTF-8编码,尤为是使用Python 3的时候。确保Vim设置文件中有下面的命令:
set encoding=utf-8
自动补全
支持Python自动补全的最好插件是YouCompleteMe。咱们再次使用Vundle安装:
Bundle 'Valloric/YouCompleteMe'
YouCompleteMe插件其实底层使用了一些不一样的自动补全组件(包括针对Python开发的Jedi),另外要安装一些C库才能正常工做。插件官方文档提供了很好的安装指南,我就不在这里重复了。切记跟随文档的步骤进行安装。
安装完成后,插件自带的设置效果就很好,可是咱们还能够进行一些小的调整:
let g:ycm_autoclose_preview_window_after_completion=1 map <leader>g :YcmCompleter GoToDefinitionElseDeclaration<CR>
上面的第一行确保了在你完成操做以后,自动补全窗口不会消失,第二行则定义了“转到定义”的快捷方式。
支持Virtualenv虚拟环境
上面“转到定义”功能的一个问题,就是默认状况下Vim不知道virtualenv虚拟环境的状况,因此你必须在配置文件中添加下面的代码,使得Vim和YouCompleteMe可以发现你的虚拟环境:
"python with virtualenv support py << EOF import os import sys if 'VIRTUAL_ENV' in os.environ: project_base_dir = os.environ['VIRTUAL_ENV'] activate_this = os.path.join(project_base_dir, 'bin/activate_this.py') execfile(activate_this, dict(__file__=activate_this)) EOF
这段代码会判断你目前是否在虚拟环境中编辑,而后切换到相应的虚拟环境,并设置好你的系统路径,确保YouCompleteMe可以找到相应的site packages文件夹。
语法检查/高亮
经过安装syntastic插件,每次保存文件时Vim都会检查代码的语法:
Plugin 'scrooloose/syntastic'
还能够经过这个小巧的插件,添加PEP8代码风格检查:
Plugin 'nvie/vim-flake8'
最后,让你的代码变得更漂亮:
let python_highlight_all=1 syntax on
配色方案
配色方案能够和你正在使用的基础配色共同使用。GUI模式能够尝试solarized方案, 终端模式能够尝试Zenburn方案:
Plugin 'jnurmine/Zenburn' Plugin 'altercation/vim-colors-solarized'
接下来,只须要添加一点逻辑判断,肯定什么模式下使用何种方案就能够了:
if has('gui_running') set background=dark colorscheme solarized else colorscheme Zenburn endif
Solarized方案同时提供了暗色调和轻色调两种主题。要支持切换主题功能(按F5)也很是简单,只需添加:
call togglebg#map("<F5>")
文件浏览
若是你想要一个不错的文件树形结构,那么NERDTree是不二之选。
Plugin 'scrooloose/nerdtree'
若是你想用tab键,能够利用vim-nerdtree-tabs插件实现:
Plugin 'jistr/vim-nerdtree-tabs'
还想隐藏.pyc文件?那么再添加下面这行代码吧:
let NERDTreeIgnore=['\.pyc$', '\~$'] "ignore files in NERDTree
超级搜索
想要在Vim中搜索任何文件?试试ctrlP插件吧:
Plugin 'kien/ctrlp.vim'
正如插件名,按Ctrl+P就能够进行搜索。若是你的检索词与想要查找的文件相匹配的话,这个插件就会帮你找到它。哦,对了——它不只仅能够搜索文件,还能检索标签!更多信息,能够观看这个Youtube视频.
显示行号
开启显示行号:
set nu
Git集成
想要在Vim中执行基本的Git命令?vim-fugitive插件则是不二之选。
Plugin 'tpope/vim-fugitive'
请看Vimcasts的这部视频,了解更多状况。
Powerline状态栏
Powerline是一个状态栏插件,能够显示当前的虚拟环境、Git分支、正在编辑的文件等信息。
这个插件是用Python编写的,支持诸如zsh、bash、tmux和IPython等多种环境。
Plugin 'Lokaltog/powerline', {'rtp': 'powerline/bindings/vim/'}
请查阅插件的官方文档,了解配置选项。
系统剪贴板
一般Vim会忽视系统剪贴板,而使用自带的剪贴板。可是有时候你想从Vim以外的程序中剪切、复制、粘贴文本。在OS X平台上,你能够经过这行代码访问你的系统剪贴板:
set clipboard=unnamed
Shell开启Vim编辑模式
最后,当你熟练掌握了Vim和它的键盘快捷方式以后,你会发现本身常常由于shell中缺少相同的快捷键而懊恼。不要紧,大部分的shell程序都有Vi模式。在当前shell中开启Vi模式,你只须要在~/.inputrc
文件中添加这行代码:
set editing-mode vi
如今,你不只能够在shell中使用Vim组合快捷键,还能够在Python解释器以及任何利用GNU Readline程序的工具(例如,大多数的数据库shell)中使用。如今,你在什么地方均可以使用Vim啦!
结语
Vim的设置到这里就差很少了(至少对于Python开发来讲是这样的)。固然,开源世界里还有大量你可使用的其余扩展,以及本文中所提到插件的替代品。你最喜好的扩展是什么?你又是如何将Vim设置符合你喜爱的?
这是我本人的Vim配置文件连接。你有没有本身的设置代码?请与咱们分享!
谢谢!
资源
-
Vim Tutor是Vim自带的程序,安装结束以后,只要在命令行输入
vimtutor
便可,程序将会用Vim编辑器教你如何使用Vim。 -
Vimcasts是一系列的高阶视频教程,内容涉及许多Vim的功能。
-
笨办法学Vimscript是学习vimscript的极好材料。