配置VIM-将VIM打造成为强大的IDE

因为学业的需要,现在开始学习Python。同时最近换了新的电脑,也用了新系统-Ubuntu,它是Linux系统。然后我就考虑啊,以后要使用什么编辑器比较好呢?!
之前编写Web Application都是使用Sublime Text3.感觉用的挺舒服的,界面和插件都比较丰富,用的也顺手。现在需要另外一个编辑器来替换它。要能够再Linux系统下方便的使用!又很多的扩展插件!界面也要好看!
这几个都统统指向了一个编辑器:VIM。传说中极客必备编辑器!
我这极客心啊。已经被燃的不要不要的。
但是传统的VIM并不好用,只有当它安装上了那些传说级的插件,才能变身“钢铁侠”,拯救猿猿的世界!
接下来就说明一下自己配置的IDE!

安装 vim

如果派的系统里面已经安装了 vim,需要检查一下 这个 vim 是否满足:

  • 版本大于 7.3
  • 支持 Python

输入命令 ‘vim —version’ 会出来一堆信息,包括版本号跟支持的特性,检查一下里面有没有 +python 字样。

如果预安装的 vim 并不满足需求,那么你就需要将已经安装的 vim remove 掉:

sudo get-install remove vim

接着安装 vim,并不能使用下面这个命令

sudo apt-get install vim

这样安装之后得到的 vim 是默认的 version,缺少 Python 支持,所以很多用 Python 编写的插件都无法使用,比如说 YouCompleteMe(大量的补全插件集合)。所以你可以选择用源码编译安装 vim,而我之前就是死在了这里。于是我选择了另一个方法,亲测可用:

sudo apt-get install vim-nox

如果你已经将默认的软件源注释掉,更换为国内源的话,可能在装的时候会遇到一些麻烦:一些依赖没有办法满足:

The following packages have unmet dependencies:
 vim-nox : Depends: vim-common (= 2:7.3.547-7) but 2:7.4.488-7 is to be installed
           Depends: libperl5.14 (>= 5.14.2) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

所以这时候保证默认的源在你的 /etc/apt/source.list 文件里面是可用的:

deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi

顺利的话会安装完成。

安装 Vundle

Vundle 是 vim 的众多插件管理器之一,也算是使用最为广泛的一个。安装 Vundle:

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

该命令将下载Vundle插件管理器,并将它放置在 Vim 编辑器 bundles 文件夹中,接着,就可以通过 .vimrc 配置文件来管理所有插件了。

在用户文件夹里面创建 vim 的配置文件:

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 命令
  • 直接在命令行执行 vim +PluginInstall +qall

安装插件 YouCompleteMe

YouCompleteMe 是非常强大的代码补全工具,它可以理解代码的上下文然后做出补全提示。
在安装 YCM 之前,我们需要先安装一些工具:

sudo apt-get install python-dev python3-dev cmake

注意,如果这里没有激活默认的软件源地址的话,可能会出现依赖无法满足而导致无法安装。
安装完成之后,增加一下交换内存来避免 error: virtual memory exhausted,因为待会编译 YCM 之前需要下载一堆工具。

sudo vim /etc/dphys-swapfile  
#edit this line
#CONF_SWAPFILE=100
CONF_SWAPFILE=1000

接着在 ~/.vimrc 文件里面引入 YCM 插件:

Plugin 'Valloric/YouCompleteMe'

然后 :PluginInstall 一下,YCM 就会从 github 上面 clone 到 ~/.vim/bundle/ 里面。

cd ~/.vim/bundle/YouCompleteMe
./install.py --clang-completer

然后进入 YouCompleteMe 文件夹里面执行 ./install.py 执行安装,应该会提示你先执行另一个 git 命令将 thirdParty 所需要的所有库给 clone 下来,按照提示做就是了。clone 完成之后再执行 ./install.py。

完成之后可以添加这个配置,来让完成补全之后 preview 窗口自动消失:

let g:SimpylFold_docstring_preview=1

外如果你也不喜欢补全的时候多出一个分割小窗口显示 docstring,可以这样配置:

" 补全内容不以分割子窗口形式出现,只显示补全列表
set completeopt-=preview

安装完成后,插件自带的设置效果就很好,但是我们还可以进行一些小的调整:

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文件夹。

安装插件 NERDTree

NERDTree 可以提供一个便捷的文件树形结构:
首先再~/.vimrc中添加

Plugin 'scrooloose/nerdtree'

如果你想用 tab 控制 NERDTree,可以利用vim-nerdtree-tabs插件实现:

Plugin 'jistr/vim-nerdtree-tabs'

然后添加下面的配置来隐藏 .pyc 文件:

let NERDTreeIgnore=['\.pyc$', '\~$'] "ignore files in NERDTree

之后进入 vim,使用命令 :help NERD_tree.txt 可以查看使用手册。

安装插件 vim-fugitive

vim-fugitive 插件可以让你在 vim 中执行一些简单的 Git 命令。

Plugin 'tpope/vim-fugitive'

配置 Vim

安装完成这么多插件之后,接下来配置一下 Vim 让它更加顺手。

1.快速切换 split view
在 .vimrc 文件里面加入下面的配置:

"使用vim方向键来切换编辑窗口 Ctrl+H/J/K/L
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>

2.代码折叠
在 .vimrc 中添加下面的配置来开启代码折叠功能:

" 允许折叠
set foldmethod=indent
set foldlevel=99

使用空格来代替 za 来实现折叠跟取消折叠:

" 允许用空格来折叠
nnoremap <space> za

第一个命令,set foldmethod=ident 会根据每行的缩进开启折叠。但是这样做会出现超过你所希望的折叠数目。插件 SimplyFold 可以解决这个问题。在.vimrc中加入下面这行代码,通过Vundle进行安装:

Plugin 'tmhedberg/SimpylFold'

如果希望看到折叠代码的文档字符串,就加入下面的配置:

let g:SimpylFold_docstring_preview=1

3.Python 代码缩进
参考资料3对这部分讲得比较全面详细,我采用自己的配置方法:

au BufNewFile,BufRead *.py
\ set tabstop=4
\ set softtabstop=4
\ set shiftwidth=4
\ set textwidth=79
\ set expandtab
\ set autoindent
\ set fileformat=unix

4.标示不必要的空白字符(有些问题)
避免出现多余的空白字符,可以让 Vim 帮忙标记出来,容易删除:

" 用红色标记多余空白
 highlight BadWhitespace ctermbg=red guibg=red
 au BufRead,BufNewFile *.py,*.pyw,*.c,*.h match BadWhitespace /\s\+$/

5.支持 UTF-8 编码
大部分情况下,进行Python开发时你应该使用UTF-8编码:

set encoding=utf-8

6.语法检查/高亮(有些问题)

通过安装syntastic插件,每次保存文件时Vim都会检查代码的语法:

Plugin 'scrooloose/syntastic'

还可以通过这个小巧的插件,添加PEP8代码风格检查:

Plugin 'nvie/vim-flake8'

最后,让你的代码变得更漂亮:

let python_highlight_all=1
syntax on

7.配色方案

配色方案可以和你正在使用的基础配色共同使用。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>")

8.超级搜索

想要在Vim中搜索任何文件?试试ctrlP插件吧:

Plugin 'kien/ctrlp.vim'

正如插件名,按Ctrl+P就可以进行搜索。如果你的检索词与想要查找的文件相匹配的话,这个插件就会帮你找到它。哦,对了——它不仅仅可以搜索文件,还能检索标签!更多信息,可以观看这个Youtube视频。

9.显示行号

开启显示行号:

set nu

10.Powerline状态栏

Powerline是一个状态栏插件,可以显示当前的虚拟环境、Git分支、正在编辑的文件等信息。

这个插件是用Python编写的,支持诸如zsh、bash、tmux和IPython等多种环境。

Plugin 'Lokaltog/powerline', {'rtp': 'powerline/bindings/vim/'}

请查阅插件的官方文档,了解配置选项。

11.系统剪贴板

通常Vim会忽视系统剪贴板,而使用自带的剪贴板。但是有时候你想从Vim之外的程序中剪切、复制、粘贴文本。在OS X平台上,你可以通过这行代码访问你的系统剪贴板:

set clipboard=unnamed

12.Shell开启Vim编辑模式

最后,当你熟练掌握了Vim和它的键盘快捷方式之后,你会发现自己经常因为shell中缺乏相同的快捷键而懊恼。没关系,大部分的shell程序都有Vi模式。在当前shell中开启Vi模式,你只需要在~/.inputrc文件中添加这行代码:

set editing-mode vi

现在,你不仅可以在shell中使用Vim组合快捷键,还可以在Python解释器以及任何利用GNU Readline程序的工具(例如,大多数的数据库shell)中使用。现在,你在什么地方都可以使用Vim啦!

结语

Vim的设置到这里就差不多了(至少对于Python开发来说是这样的)。当然,开源世界里还有大量你可以使用的其他扩展,以及本文中所提到插件的替代品。

资源

  • Vim Tutor是Vim自带的程序,安装结束之后,只要在命令行输入vimtutor即可,程序将会用Vim编辑器教你如何使用Vim。
  • Vimcasts是一系列的高阶视频教程,内容涉及许多Vim的功能。
  • Vim官方文档
  • Open Vim
  • 笨办法学Vimscript是学习vimscript的极好材料。

OVER!
希望配置出你自己的“钢铁侠”!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章