#####安装 vim
如果派的系统里面已经安装了 vim,需要检查一下 这个 vim 是否满足:
- 版本大于 7.3
- 支持 Python
输入命令 ‘vim –version’ 会出来一堆信息,包括版本号跟支持的特性,检查一下里面有没有 +python
字样。
如果预安装的 vim 并不满足需求,那么你就需要将已经安装的 vim remove 掉:
1 | sudo get-install remove vim |
接着安装 vim,并不能使用下面这个命令
1 | sudo apt-get install vim |
这样安装之后得到的 vim 是默认的 version,缺少 Python 支持,所以很多用 Python 编写的插件都无法使用,比如说 YouCompleteMe(大量的补全插件集合)。所以你可以选择用源码编译安装 vim,而我之前就是死在了这里。于是我选择了另一个方法,亲测可用:
1 | sudo apt-get install vim-nox |
如果你已经将默认的软件源注释掉,更换为国内源的话,可能在装的时候会遇到一些麻烦:一些依赖没有办法满足:
1 | The following packages have unmet dependencies: |
所以这时候保证默认的源在你的 /etc/apt/source.list
文件里面是可用的:
1 | deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi |
顺利的话会安装完成。
#####安装 Vundle
Vundle 是 vim 的众多插件管理器之一,也算是使用最为广泛的一个。安装 Vundle:
1 | git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim |
该命令将下载Vundle插件管理器,并将它放置在 Vim 编辑器 bundles 文件夹中,接着,就可以通过 .vimrc 配置文件来管理所有插件了。
在用户文件夹里面创建 vim 的配置文件:
1 | touch ~/.vimrc |
将下面的 Vundle 配置项目添加到配置文件的顶部:
1 | set nocompatible " required |
上面中间空白的地方就是用来引入你的插件。具体格式应该怎么编写,可以参照 Vundle 的 github 地址。引入插件之后,使用下面两种任一种方法来安装:
- 运行 vim 然后执行 :PluginInstall 命令
- 直接在命令行执行
vim +PluginInstall +qall
#####安装插件 YouCompleteMe
YouCompleteMe 是非常强大的代码补全工具,它可以理解代码的上下文然后做出补全提示。由于我们的派是32位系统,所以我们在安装的时候不能像普通 linux 系统一样添加 clang-completer
支持。
在安装 YCM 之前,我们需要先安装一些工具:
1 | sudo apt-get install python-dev cmake |
注意,如果这里没有激活默认的软件源地址的话,可能会出现依赖无法满足而导致无法安装。
安装完成之后,增加一下交换内存来避免 error: virtual memory exhausted
,因为待会编译 YCM 之前需要下载一堆工具。
1 | sudo vim /etc/dphys-swapfile |
然后重启你的系统。之后如果使用 free -m
命令,会看到交换空间的大小已经增加到 1G。
接着在 ~/.vimrc
文件里面引入 YCM 插件:
1 | Plugin 'Valloric/YouCompleteMe' |
然后 :PluginInstall 一下,YCM 就会从 github 上面 clone 到 ~/.vim/bundle/
里面。然后进入 YouCompleteMe 文件夹里面执行 ./install.py
执行安装,应该会提示你先执行另一个 git 命令将 thirdParty 所需要的所有库给 clone 下来,按照提示做就是了。clone 完成之后再执行 ./install.py
。
完成之后可以添加这个配置,来让完成补全之后 preview 窗口自动消失:
1 | let g:SimpylFold_docstring_preview=1 |
另外如果你也不喜欢补全的时候多出一个分割小窗口显示 docstring,可以这样配置:
1 | " 补全内容不以分割子窗口形式出现,只显示补全列表 |
#####安装插件 NERDTree
NERDTree 可以提供一个便捷的文件树形结构:
1 | Plugin 'scrooloose/nerdtree' |
如果你想用 tab 控制 NERDTree,可以利用vim-nerdtree-tabs插件实现:
1 | Plugin 'jistr/vim-nerdtree-tabs' |
然后添加下面的配置来隐藏 .pyc 文件:
1 | let NERDTreeIgnore=['\.pyc$', '\~$'] "ignore files in NERDTree |
之后进入 vim,使用命令 :help NERD_tree.txt
可以查看使用手册。下面列举部分用法:
1.全局命令
1.1 :NERDTree [<start-directory> | <bookmark>]
这个命令会打开一个新的 NERD tree,tree 的根节点可由参数来指定,一共有三种情况:
- 没有指定任何参数,那么当前目录就是根节点
- 指定了某个目录,那么该目录就会被使用
- 如果给定了一个 bookmark ,那么书签相应的目录就会被使用
例如:
1 | :NERDTree /home/marty/vim7/src |
1.2 :NERDTreeFromBookmark <bookmark>
从给定的 bookmark 打开 NERD tree
1.3 :NERDTreeToggle [<start-directory> | <bookmark>]
如果某个 NERD tree 已经存在了,那么这个命令会将 tree 重新打开并且渲染;如果没有 tree 存在,那么这个命令就等同于 :NERDTree
1.4 :NERDTreeMirror
在当前 tab 共享其他 tab 的 tree。tree 中发生的变化会同时反映在两个 tab 中,就像它们是同一个 buffer 一样。
如果只有一个 tree 存在,那么该 tree 会被自动共用,否则将会询问需要共用哪个 tree。
1.5 :NERDTreeClose
关闭当前 tab 的 tree
1.5 :NERDTreeFind
在 tree 中查找当前文件。
如果没有 tree 存在并且当前文件在 vim 的 CWD(currenting working directory) 中,那么将会在 CWD 中初始化一个 tree 然后指向当前文件;否则将会在当前文件所在目录初始化一个 tree。
无论哪一种情况,都会生成一个 tree 并且指向当前文件。
1.6 :NERDTreeCWD
将 tree 的 root 改为当前目录。如果没有 tree 存在,那么将生成一个新的 tree。
2.书签(bookmark)
在 NERD tree 中,书签可以用来标记文件或者目录。例如,你可以用 bookmark 来编辑所有项目的目录。
2.1 Bookmark Table
如果一个 bookmark table 可用(see NERDTree-B
andNERDTreeShowBookmarks
),它将会在 tree 上被渲染显示出来。你可以双击 bookmark 或者使用 NERDTree-o
来触发他们。See also, NERDTree-t
and NERDTree-T
2.2 Bookmark commands
注意,下面这些命令仅仅在 NERD tree buffer 里面才有效。
2.2.1 :Bookmark [<name>]
将当前节点标记为名称为 name 的 bookmark。如果已经存在一个名称为 name 的 bookmark,那么原有的 bookmark 将会被覆盖。name 不能包含空格。如果没有指定一个 name,默认名称为文件或者目录的名字。对于目录,会显示一个小尾巴。
2.2.2 :BookmarkToRoot <bookmark>
将 bookmark 对应的目录作为 tree 的新根节点。如果当前 tree 中某个子节点对应这个 bookmark,那么当前 tree 将会被使用,否则会打开一个新的 tree。如果 bookmark 对应的是一个文件,那么它所在的目录就会作为根节点。
2.2.3 :RevealBookmark <bookmark>
如果 bookmark 对应的节点已经存在于当前的 tree 中,那么它将会被暴露出来,光标也会指向它。
2.2.4 :OpenBookmark <bookmark>
bookmark 必须指向一个文件。该文件将会被打开,就正如使用 NERDTree-o
命令一样。如果文件已经存在于当前 tree 中,那么它将会被 revealed。
2.2.5 :ClearBookmarks [<bookmarks>]
移除所有给定的 bookmark。如果没有指定 bookmark,那么当前节点的所有 bookmark 都会被清除。
bookmark 还是蛮便捷的。我给项目工程根目录设置了一个 bookmark,需要编码时只需要随时随地:
1 | vim |
然后就可以开干了
3.配置
3.1 vim 中打开某文件时自动启用 NERD tree
在 .vimrc 中添加 autocmd vimenter * NERDTree
3.2 用组合键打开 NERDTree
在 .vimrc 中添加 map <C-n> :NERDTreeToggle<CR>
暂时记录这么多先。
#####安装插件 vim-fugitive
vim-fugitive 插件可以让你在 vim 中执行一些简单的 Git 命令。
1 | Plugin 'tpope/vim-fugitive' |
#####配置 Vim
安装完成这么多插件之后,接下来配置一下 Vim 让它更加顺手。
1.快速切换 split view
在 .vimrc
文件里面加入下面的配置:
1 | "split navigations |
这段配置可以让我们按 Ctrl+Vim
的标准移动键,就可以切换到指定窗口。
简单来说,nnoremap将一个组合快捷键映射为另一个快捷键。
2.代码折叠
在 .vimrc 中添加下面的配置来开启代码折叠功能:
1 | " Enable folding |
使用空格来代替 za
来实现折叠跟取消折叠:
1 | " Enable folding with the spacebar |
第一个命令,set foldmethod=ident
会根据每行的缩进开启折叠。但是这样做会出现超过你所希望的折叠数目。插件 SimplyFold 可以解决这个问题。在.vimrc中加入下面这行代码,通过Vundle进行安装:
1 | Plugin 'tmhedberg/SimpylFold' |
如果希望看到折叠代码的文档字符串,就加入下面的配置:
1 | let g:SimpylFold_docstring_preview=1 |
3.Python 代码缩进
参考资料3对这部分讲得比较全面详细,我采用自己的配置方法:
1 | set expandtab |
自动缩进有用,但是在某些情况下(比如函数定义有多行的时候),并不总是会达到你想要的效果。我们可以利用indentpython.vim插件,来解决这个问题:
1 | Plugin 'vim-scripts/indentpython.vim' |
4.标示不必要的空白字符
避免出现多余的空白字符,可以让 Vim 帮忙标记出来,容易删除:
1 | " mark bad white space as red |
5.支持 UTF-8 编码
大部分情况下,进行Python开发时你应该使用UTF-8编码:
1 | set encoding=utf-8 |
6.代码着色
1 | colo default " 可替换 Vim 自带的配色方案,也可以使用网上提供的配色 |
#####参考资料
1.Building Vim from source
2.Raspberry Pi install Vim and YouCompleteMe
3.Vim与Python真乃天作之合