快速起步
本段落是快速完成Python Vim IDE设置的步骤,具体解释见本段落后的内容。本段落目标是尽快开始
- 安装Vundle扩展管理器
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
- 使用vimrc realpython或者直接从VIM and Python - a Match Made in Heaven提供的VIM config保存成
~/.vimrc
以下编译安装vim,过程比较繁杂。不成功的尝试见 vim编译YouCompleteMe失败记录
从源代码编译过程参考 Building Vim from source
/usr/lib64/python3.4/config-3.4m
执行
vim
命令,然后在命令模式下执行:PluginInstall
安装插件附加屏幕分割配置
set splitbelow
set splitright
"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>
- 使用nerdtree功能(树状结构文件浏览)
:NERDTree
上述步骤已完成vim ide for python
,以下步骤不需要执行,仅供参考
vim环境检查
检查 vim
版本
vim --version
vim
版本要求> 7.3,并且支持Python(可以看到上述输出有+python
)
验证方法是在vim
中运行命令:python import sys; print(sys.version)
可以看到输出
2.7.10 (default, Oct 23 2015, 18:05:06)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)]
vim扩展
首先需要一个好的扩展管理器
vim的扩展称为bundles或者plugins
Vundle
vim有多种扩展管理器,最推荐的是Vundle,就好像VIM的pip,安装方法如下
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
然后在自己的用户目录添加一个文件
touch ~/.vimrc
然后在这个.vimrc
文件开头添加
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
然后开启vim
程序,在命令中输入
:PluginInstall
可以看到Vundle自动下载安装插件
设置IDE
VIM不需要鼠标
分割页面
在vim
中,使用命令 :sv <filename>
则垂直分隔页面,而使用:vs <filename>
则水平分隔页面。
可以通过在
.vimrc
文件中设置屏幕的不同分隔区域
set splitbelow
set splitright
要在不同的split分区移动而不需要鼠标,则可以在.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 move to the split below
Ctrl-k move to the split above
Ctrl-l move to the split to the right
Ctrl-h move to the split to the left
nnoremap
是nutshell中将一个键映射到另外一个键,例如上面的案例nnoremap <C-J> <C-W><C-J>
表示将<C-J
映射成<C-W><C-j>
键。
缓存
缓存可以理解为最近打开的文件,vim提供了方便访问最近的缓存,只要输入:b <buffer name or number>
用于切换到一个打开的缓存。可以使用:ls
来列出所有缓存。
在
:ls
输出到最后,vim提示Hit enter to continue
,你可以代之以:b <buffer number>
来选择列表中的缓存。
代码目录
很多现代的IDE提供一个方便的折叠方式展示方法或者类,你可以在.vimrc
中添加
" Enable folding
set foldmethod=indent
set foldlevel=99
但是这会是你必须使用za
来进入目录,可以添加以下配置到.vimrc
这样空格键就更好使用
" Enable folding with the spacebar
nnoremap <space> za
对于初始化命令,使用 set foldmethod=indent
,创建行缩进的目录,这样可以更为方便。比较好的推荐插件是SimpylFold
,可以在 .vimrc
中添加
Plugin 'tmhedberg/SimpylFold'
然后再次执行 :PluginInstall
就可以安装插件
然后在.vimrc
中添加
let g:SimpylFold_docstring_preview=1
Python缩排
对于Python,缩排是非常重要的,需要满足如下两点来完成缩进
- 缩进符合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
然后再添加以下内容
au BufNewFile,BufRead *.js, *.html, *.css
\ set tabstop=2
\ set softtabstop=2
\ set shiftwidth=2
上述插件称为ftype
,也就是让你可以针对不同的文件类型区分文件
- 自动缩排
自动缩排对于python不是总适用,所以我们为了解决这个问题,使用 indentpython.vim
扩展
Plugin 'vim-scripts/indentpython.vim'
并且我们要避免不需要的空格,素以添加
au BufRead,BufNewFile *.py,*.pyw,*.c,*.h match BadWhitespace /\s\+$/
- UTF8支持
在.vimrc
中添加
set encoding=utf-8
- 自动完成
一个非常好的自动完成插件 Valloric/YouCompleteMe
,也就是添加
Bundle 'Valloric/YouCompleteMe'
不过,需要一些C库来避免插件自身的问题,文档介绍installation instructions
let g:ycm_autoclose_preview_window_after_completion=1
map <leader>g :YcmCompleter GoToDefinitionElseDeclaration<CR>
此外,如果提示错误:
ycm_client_support.[so|pyd|dll] and ycm_core.[so|pyd|dll] not detected; you need to compile YCM before using it. Read the docs!
这个报错是正常的,因为ycm需要手工编译出库文件
cd ~/.vim/bundle/YouCompleteMe
./install.py --clang-completer
支持Virtualenv
"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
上述配置可以检查运行是否在virtualenv,并切换
语法检查和高亮
使用syntastic
扩展
Plugin 'scrooloose/syntastic'
添加PEP8检查
Plugin 'nvie/vim-flake8'
然后再添加代码较好查看的方法
let python_highlight_all=1
syntax on
颜色
使用solarized用于GUI,以及Zenburn用于终端模式
Plugin 'jnurmine/Zenburn'
Plugin 'altercation/vim-colors-solarized'
以及检查环境来设置VIM模式
if has('gui_running')
set background=dark
colorscheme solarized
else
colorscheme zenburn
endif
Solarized携带了两种theme,一种是dark,一种是light,切换非常方便,使用F5
call togglebg#map("<F5>")
文件浏览
Plugin 'scrooloose/nerdtree'
如果希望使用tabs,使用vim-nerdtree-tabs
如果需要隐藏.pyc
文件,使用
超级搜索
Plugin 'kien/ctrlp.vim'
只要按下Ctrl-P
就可以搜索
设置行号
set nu
集成Git
Plugin 'tpope/vim-fugitive'
Powerline
Plugin 'Lokaltog/powerline', {'rtp': 'powerline/bindings/vim/'}
系统剪贴板
set clipboard=unnamed
在shell中使用vim
要激活,则在~/.inputrc
添加
set editing-mode vi
一份完整清单vimrc realpython