打造Linux下基于vim的python编辑器

一.前言

好久没发博客了,经过一个假期的深思熟虑,我决定要考研了。虽然我还是大二,但是也要早早准备鸭。

近况是参加了数学建模和两个互联网+项目,并开始学习机器学习。

最近为了考研购置了ipad air,Notability记笔记真的好用,也想用ipad打打代码,就用Termius连接了阿里云学生服务器,把vim配置成了集标签导航、目录树导航、状态栏美化、代码提示和自动补全于一体的python编辑器,功能可谓应有尽有。

二.环境

CentOS7 + vim7.4 + git1.8 + python2.7

利用

vim --version

git --version

命令查询

如果缺少环境可以用yum命令安装

三.基础插件安装

1.安装插件管理工具vundle

安装插件之前我们用到了一个及其好用的插件管理工具vundle

git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

2.编辑.vimrc配置文件

~/.vimrc是VIM的配置文件,如果这个配置文件不存在,我们可以自行创建(执行指令vi ~/.vimrc然后按i键即可 )。安装好了vundle,需要在~/.vimrc配置文件中添加vundle支持。所以,在~/.vimrc中添加代码如下

1
2
3
4
5
6
7
filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

if filereadable(expand("~/.vimrc.bundles"))
source ~/.vimrc.bundles
endif

3.编辑.vimrc.bundles配置文件

为了方便管理插件,我们首先创建文件~/.vimrc.bundles,然后添加代码如下 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
if &compatible
set nocompatible
end

filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

" Let Vundle manage Vundle
Bundle 'gmarik/vundle'
" Define bundles via Github repos
" 标签导航
Bundle 'majutsushi/tagbar'
Bundle 'vim-scripts/ctags.vim'
" 静态代码分析
Bundle 'scrooloose/syntastic'
" 文件搜索
Bundle 'kien/ctrlp.vim'
" 目录树导航
Bundle "scrooloose/nerdtree"
" 美化状态栏
Bundle "Lokaltog/vim-powerline"
" 主题风格
Bundle "altercation/vim-colors-solarized"
" python自动补全
Bundle 'davidhalter/jedi-vim'
Bundle "klen/python-mode"
" 括号匹配高亮
Bundle 'kien/rainbow_parentheses.vim'
" 可视化缩进
Bundle 'nathanaelkane/vim-indent-guides'
if filereadable(expand("~/.vimrc.bundles.local"))
source ~/.vimrc.bundles.local
endif
filetype on

4.安装插件

在真正执行安装命令之前,需要先安装一个叫做ctags的插件,因为tagbar依赖于ctags。安装ctags的方法为:

1
2
3
4
5
6
7
8
9
# 下载源码
wget http://prdownloads.sourceforge.net/ctags/ctags-5.6.tar.gz

#解压并安装
tar -zxvf ctags-5.6.tar.gz

cd ctags-5.6

./configure && make && make install

我们已经指定好了各个插件的路径,接下里就是安装各个插件了。在shell中输入vim,进入命令行模式输入BundleInstall(也就是在VI的插入模式下,按键ESC,然后输入 :BundleInstall)。

运行这个命令就开始自行安装我们之前指定的各个插件了。这个过程需要连网,下载并安装好各个插件之后会提示Done!注意一定要等待每个插件全部安装好后最下方啊的提示行提示Done才退出vim。

四.插件配置

已经安装好了各个插件,接下里就可以直接用了吗?答案是否定的,我们还需要继续对自己安装的插件进行配置。配置这里也很简单,下面是我的配置,更新~/.vimrc为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

if filereadable(expand("~/.vimrc.bundles"))
source ~/.vimrc.bundles
endif

" tagbar标签导航
nmap <Leader>tb :TagbarToggle<CR>
let g:tagbar_ctags_bin='/usr/bin/ctags'
let g:tagbar_width=30
autocmd BufReadPost *.cpp,*.c,*.h,*.hpp,*.cc,*.cxx call tagbar#autoopen()
let g:jedi#auto_initialization = 1
" 主题 solarized
let g:solarized_termtrans=1
let g:solarized_contrast="normal"
let g:solarized_visibility="normal"
" 配色方案
set background=dark
set t_Co=256
colorscheme solarized
" 目录文件导航NERD-Tree
" \nt 打开nerdree窗口,在左侧栏显示
nmap <leader>nt :NERDTree<CR>
let NERDTreeHighlightCursorline=1
let NERDTreeIgnore=[ '\.pyc$', '\.pyo$', '\.obj$', '\.o$', '\.so$', '\.egg$', '^\.git$', '^\.svn$', '^\.hg$' ]
let g:netrw_home='~/bak'
"close vim if the only window left open is a NERDTree
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | end

" ctrlp文件搜索
" 打开ctrlp搜索
let g:ctrlp_map = '<leader>ff'
let g:ctrlp_cmd = 'CtrlP'
" 相当于mru功能,show recently opened files
map <leader>fp :CtrlPMRU<CR>
" set wildignore+=*/tmp/*,*.so,*.swp,*.zip " MacOSX/Linux"
let g:ctrlp_custom_ignore = {
\ 'dir': '\v[\/]\.(git|hg|svn|rvm)$',
\ 'file': '\v\.(exe|so|dll|zip|tar|tar.gz)$',
\ }
"\ 'link': 'SOME_BAD_SYMBOLIC_LINKS',
let g:ctrlp_working_path_mode=0
let g:ctrlp_match_window_bottom=1
let g:ctrlp_max_height=15
let g:ctrlp_match_window_reversed=0
let g:ctrlp_mruf_max=500
let g:ctrlp_follow_symlinks=1
" vim-powerline美化状态
" let g:Powerline_symbols = 'fancy'
let g:Powerline_symbols = 'unicode'
" 括号匹配高亮
let g:rbpt_colorpairs = [
\ ['brown', 'RoyalBlue3'],
\ ['Darkblue', 'SeaGreen3'],
\ ['darkgray', 'DarkOrchid3'],
\ ['darkgreen', 'firebrick3'],
\ ['darkcyan', 'RoyalBlue3'],
\ ['darkred', 'SeaGreen3'],
\ ['darkmagenta', 'DarkOrchid3'],
\ ['brown', 'firebrick3'],
\ ['gray', 'RoyalBlue3'],
\ ['black', 'SeaGreen3'],
\ ['darkmagenta', 'DarkOrchid3'],
\ ['Darkblue', 'firebrick3'],
\ ['darkgreen', 'RoyalBlue3'],
\ ['darkcyan', 'SeaGreen3'],
\ ['darkred', 'DarkOrchid3'],
\ ['red', 'firebrick3'],
\ ]
let g:rbpt_max = 40
let g:rbpt_loadcmd_toggle = 0

" 可视化缩进
let g:indent_guides_enable_on_vim_startup = 0 " 默认关闭
let g:indent_guides_guide_size = 1 " 指定对齐线的尺寸
let g:indent_guides_start_level = 2 " 从第二层开始可视化显示缩进
set ts=4
set expandtab
set autoindent

" 运行文件
map <F5> :w<cr>:r!python %<cr>

你可以根据自己的喜好设置快捷键,是按键\,根据我的配置。在VIM的正常模式下:

  • 依次按键\tb,就会调出标签导航;

  • 依次按键\ff,就会调出文件搜索;

  • 依次按键\nt,就会调出目录导航。

在VIM的正常模式下,按F5就会保存文件并使用python3运行当前文件,并将结果输出到当前界面。运行完之后,依然可以在VIM的正常模式下按u,撤回这个输出操作,这样输出结果就撤回了,我们就可以继续编写自己的代码了。

五.遇到的问题与解决方案

以上教程中python自动补全插件我安装后运行没有成功,所以自己另外找了个自动补全python代码的插件,步骤如下:

安装

1
2
cd ~/.vim/bundle
git clone https://github.com/rkulla/pydiction.git

官方的步骤说明:

Put python_pydiction.vim in ~/.vim/after/ftplugin/
Create this directory if doesn’t yet exist. Vim looks there automatically

意思是把下载的pydiction文件夹中的python_pydiction.vim文件(这个文件在/pydiction/after/ftplugin/目录下)移动到 ~/.vim/afer/ftplugin/目录下,这是vim实现该功能的默认目录,如果没有这个目录就手动创建一下。

在 ~/.vimrc配置文件中追加如下代码

1
2
3
filetype plugin on
let g:pydiction_location = '~/.vim/bundle/pydiction/complete-dict'
let g:pydiction_menu_height = 3

六.总结

网上的教程有很多不适合我,磕磕绊绊终于配置好了vim的python编译器,经过这些步骤之后相信你对vim插件的管理已经有了清晰的认识,也可以寻找并添加新的插件来完善自己的编辑器了。