因为学业的需要,现在开始学习Python。同时最近换了新的电脑,也用了新系统-Ubuntu,它是Linux系统。然后我就考虑啊,以后要使用什么编辑器比较好呢?!
之前编写Web Application都是使用Sublime Text3.感觉用的挺舒服的,界面和插件都比较丰富,用的也顺手。现在需要另外一个编辑器来替换它。要能够再Linux系统下方便的使用!又很多的扩展插件!界面也要好看!
这几个都统统指向了一个编辑器:VIM。传说中极客必备编辑器!
我这极客心啊。已经被燃的不要不要的。
但是传统的VIM并不好用,只有当它安装上了那些传说级的插件,才能变身“钢铁侠”,拯救猿猿的世界!
接下来就说明一下自己配置的IDE!
如果派的系统里面已经安装了 vim,需要检查一下 这个 vim 是否满足:
输入命令 ‘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 是 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 。引入插件之后,使用下面两种任一种方法来安装:
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 g :YcmCompleter GoToDefinitionElseDeclaration
上面的第一行确保了在你完成操作之后,自动补全窗口不会消失,第二行则定义了“转到定义”的快捷方式。
支持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 可以提供一个便捷的文件树形结构:
首先再~/.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 中执行一些简单的 Git 命令。
Plugin 'tpope/vim-fugitive'
安装完成这么多插件之后,接下来配置一下 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("" )
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开发来说是这样的)。当然,开源世界里还有大量你可以使用的其他扩展,以及本文中所提到插件的替代品。
OVER!
希望配置出你自己的“钢铁侠”!