前言
|
|
全程参考: 所需及所获:像使用IDE一样vim
其余参考将会在文中相关部分列出。
文中内容如有错误,请指正!
原创,转载请注明出处!
Ready
VIM的安转请自行进行。版本最好在7.5以上。
请检查用户目录下是否存在: .vim/
文件夹和.vimrc
用户配置文件,可以使用命令 ls -l ~
查看。.vim/
文件夹用于存放后续所有插件。.vimrc
用于配置VIM功能,包括基本语法、插件配置以及部分脚本等。
如果没有请自行创建。
基本配置
可以直接添加到.vimrc
文件中:
|
|
插件管理
Vundle是一个行之有效的插件,接管.vim/
文件夹,为每一个插件指定唯一目录。更清晰、明了。
Vundle会接管.vim/
文件夹下的所有目录,所以先清空。在通过命令安装Vundle:
|
|
然后在.vimrc
中增加配置:
|
|
vundle管理的插件必须位于call vundle#begin()
和 call vundle#end()
之间,其中每项
|
|
对应一个插件,后续如有新的插件,只需要追加到该列表中。安装新插件时需要在Github上找到插件地址,追加到列表中保存.vimrc
文件,然后进入到VIM命令模式,执行:
|
|
便可以通过vundle自动安装插件。
需要卸载插件时,需要在.vimrc
文件中注释该插件或者删除,保存.vimrc
文件后,在命令模式执行:
|
|
即可删除该插件。关于插件更新,直接在命令模式下,执行:
|
|
即可更新整个插件列表。
关于插件: 多数插件在Github上都有不同的下载源,优先选取该插件的作者的下载源。
UI Theme
界面优化,主题配置:
|
|
主题
通过前面插件列表下载了solarized、molokai两款主题,可以通过注释其中一款而是用另一款。
在实际使用中molokai可以直接使用,而主题solarized使用时,背景配色异常,最后通过以下方式正常使用(安装后能够正常使用的请忽略)。
选取终端菜单栏中
Edit(编辑)栏,最后一项
Profile Preference,在弹出界面框中选中
color项,如下图所示:
代码折叠
文件代码量大时,可能会对分析代码产生干扰,或者通过折叠函数调用与定义之间的代码,可以更加直观的理解函数功能。
VIM自身支持多种折叠:手动折叠(manual)、基于缩进进行折叠(indent)、基于语义进行折叠(syntax)、未更改文本构成折叠等等。
其中indent、syntax较为适合编程。此段摘抄 所需及所获:像使用IDE一样使用vim 4.3节。
操作: za: 打开或关闭当前折叠;zM: 关闭多有折叠;zR: 打开多有折叠。
其他
VIM基本配置项很多,本人并没有进行太多设置,具体设置项的作用或者功能,请参考其他.vimrc
文件,或者对该项
Search,基本上都能够得到解释,在此不过多赘述。将会在文末贴上部分其他作者的.vimrc
文件,以供参考。
插件详细
状态栏
|
|
vim-powerline 和 vim-airline 都是状态栏美化插件,选用其一,注释另外一个。vim-airline-theme 提供 vim-airline
的主题,
在其路径 vim-airline-theme/doc/
下文件 airline-themes.txt
有对于可使用的主题的介绍。
状态栏配置,在.vimrc
文件中添加以下内容:
|
|
当选择vim-powerline
作为状态栏主题时,添加上述内容;选择vim-airline
时,添加以下内容:
|
|
可视化缩进
|
|
很多代码规范中建议代码嵌套最多不能超过3层,但难免有更多层出现。
vim-indent-guides 插件提供可视化缩进,将相同缩进的代码关联起来,vim-indent-guides
通过识别制表符来绘制缩进连接线。在.vimrc
文件中添加如下配置:
|
|
本人配置完成后使用,发现色块宽度占了4个空格,原因未查。
另外一个插件indentLine ,在显示可视化缩进时,只有一根细线,甚和我意。推荐一哈。
后面还有一款他写的插件LeaderF
,提供文件搜索功能,后面在介绍。indentLine
基本上可以不用配置,但提供几个可选用配置项。
|
|
文件切换
|
|
vim-fswitch 用来实现在源文件和头文件中快速切换,但需要保证文件名相同,比如main.c
和main.h
。需要在.vimrc
文件中添加:
|
|
我在这里使用了Alt+t
组合键,M
代表Alt
键。除掉苹果键盘,Alt
键就在大拇指下,个人觉得这个键,使用很方便。插播一下Alt
键说明:
|
|
标签系统
代码中的变量、宏、结构、枚举、类、函数、对象等等这些统称为标识符,每个标识符的定义、所在文件的行位置、所在文件的路径等信息就是标签(tag)。
此段摘抄 所需及所获:像使用IDE一样使用vim 4.6节。
Exuberant Ctags
就是一款经典的用于生成代码标签信息的工具,支持数十种语言。请在终端中执行命令安装。安装完成后,在代码目录中执行:
|
|
将会在当前目录下生成tag
文件,包含了当前目录下所有文件的标识符集合。
标签除了可以很直观展示当前文件中的各种信息,还能提供强大的导航和补全功能,接下来将会一一介绍。
在生成tag
文件后,可以通过插件 tagbar 把从当前代码文件中提取出的所有标识符放在一个侧边子窗口中,并且能够按语法规则将标识符进行归类。tagbar
安装完成后在.vimrc
文件中添加如下配置:
|
|
进入之前生成tag
文件的目录下,打开某一源文件后,通过快捷键F8
打开tagbar
子窗口,可以通过快捷键ctrl+w+w
快速切换子窗口,类似alt+tab
的功能,或者使用前面定义的ctrl+h/i/j/k
在normal
模式下进行窗口切换,进入到tagbar
窗口中。
在标识符列表中选中对应标识符后即可跳转至源码中对应位置;在源码中停顿几秒,tagbar
将高亮对应标识符。tagbar
有两种排序方式,一是按标签字母先后顺序;一是按标签在源码中出现的先后顺序。此段摘抄 所需及所获:像使用IDE一样使用vim 4.7节。
注释掉let g:tagbar_sort=0
,将会使用字母顺序排序。
开发时代码不停在变更,如果每次都需要手动执行命令生成新的标签文件,太麻烦。通过引入插件 indexer 实现自动生成标签。并引入。indexer
依赖 DfrankUtil、vimprj 两个插件,请一并安装。 此段摘抄所需及所获:像使用IDE一样使用vim 4.7节。
|
|
并在.vimrc
文件中添加:
|
|
另外,indexer
还有个自己的配置文件,用于设定各个工程的根目录路径,配置文件位于~/.indexer_files
,内容格式为:
|
|
方括号内为自动生成的标签文件名字,一般更工程一样。路径为工程的代码目录,不要包含构建目录,文档目录等,以免产生非代码文件的标签信息。
当打开以上目录任何代码文件时,插件indexer
便对整个目录创建标签文件,当代码有更新,文件保存时,indexer
将自动调用ctags
更新标签文件。indexer
生成的标签文件以方括号内的名字命名,位于目录: ~/.indexer_files_tags/
下,并自动引入Vim
中。此处3段摘抄 所需及所获:像使用IDE一样使用vim 4.7节。
声明/定义跳转
主要两类导航: 基于标签的跳转和基于语义的跳转。
既然Vim
可以引入标签,说明Vim
能识别标签。虽然标签文件中并无行号,但已经有标签所在文件以及标签所在行的完整内容,Vim
只需切换至对应文件,再在文件内做内容查找即可找到对应行。
换言之,只要有对应的标签文件,Vim
就能根据标签跳转至标签定义处。
在前述已生成标签文件的项目目录中打开任意文件,将光标定位到某一函数名或变量上,键入快捷键g]
,Vim
将罗列处该函数或变量名所有的标签候选列表,按需要键入编号后按Enter
键即可跳转进入。
基于语义的跳转是在后面介绍补全时的一款插件YCM
的功能。此处直接给出快捷键设置,在.vimrc
文件中添加配置:
|
|
YCM
提供这三个快捷键定义,意思很明了,可以根据自己情况进行配置,当然需要配置不同的快捷键。
但是个人感觉,这两个插件的跳转功能都不够好用。
写到这儿,有点不想写了。很多东西在我参考的文章中都很详细,很多地方都是摘抄过来的,所以后续我回直接贴出我所介绍的插件在原文章中的章节位置,然后主要介绍我所遇到的一些小问题和解决办法,以及我的快捷键配置,提供十分有限的参考价值,谢谢。
快速移动
vim-easymotion 更多请参考 所需及所获:像使用IDE一样使用vim 8.3节。
.vimrc
文件配置如下:
|
|
|
|
设置启用easymotion
的前缀键<Leader>
为f
,在normal
模式下,双击f
键后输入需要跳转到的位置的字母,然后根据快速跳转的字符,快速定位到目标位置。
内容查找
更多请参考 所需及所获:像使用IDE一样使用vim 4.8节。
ctrlsf.vim 后端调用ack
一定记得安装。.vimrc
文件中添加配置如下:
|
|
|
|
ctrlsf
通过p
键可以定位到匹配项的完整代码,类似跳转功能,键入q
退出插件。
内容替换
更多请参考 所需及所获:像使用IDE一样使用vim 4.9节。
vim-multiple-cursors 配合ctrlsf
插件,实现多个不同位置的字符串替换。.vimrc
文件中添加如下配置:
|
|
|
|
S
表示Shift
键。在通过ctrlsf
插件列举处匹配项后,则可以通过快捷键S-n
选中当前匹配项并跳到下一个匹配项,键入S-s
则可以跳过当前项而选中下一个,可以通过S-p
回退到前一个匹配项。键入Esc
推出插件。
Vim
自带很强大的替换功能,这里就不介绍了。建议了解一哈,一般会看这篇文档的,都有可能在面试的时候被提问。-_-
文件搜索
|
|
ctrlP 和LeaderF 插件都能实现文件搜索功能,ctrlP
在网上搜索就能找到配置方法,这里不介绍。这里使用的LeaderF
在网上资料不多,看作者的介绍操作,暂时还不够熟悉,后续补充。
快速注释
更多请参考 所需及所获:像使用IDE一样使用vim 5.1节。
NERD Commenter 能够快速注释/取消注释,并且提供不同的注释方式。在.vimrc
文件中添加配置:
|
|
|
|
在Vim
normal
模式下,键入v
或者V
进入可视化模式,通过h/j/k/l
选中需要注释的部分,键入快捷键alt+c
则注释当前选中代码。
反之,选中需要取消注释的部分,键入快捷键alt+u
取消注释。alt+a
可以切换注释方式:/* */或者//
,但这个快捷键定义跟某些有冲突,将就可用,也可以自定义其他。
行尾空格
这个插件是我在知乎的一个回答中了解到的,有实用性,提供参考。贴上这个知乎的帖子:https://www.zhihu.com/question/19989337
写程序时,虽然行尾的空格都看不见,遇上了的话,有点强迫症的肯定受不了。为了能够显示行尾的空格,需要ShowTrailingWhiteSpace这个插件。在.vimrc
中添加如下内容:
|
|
|
|
帖子中的回答者,还提供了一个快捷键,自动清理文件中所有行尾的空格:
|
|
我自己改变了一哈,每次保存文件(所有格式的文件)的时候,自动清除当前文件中所有行尾的空格:
|
|
注释掉的配置,表示只在这几个类型的文件执行保存文件命令时自动清除行尾空格,文件类型自己根据需要添加。
补全
主要介绍三种补全:模板补全,基于标签的补全,基于语义的补全。
模板补全: 更多请参考 所需及所获:像使用IDE一样使用vim 5.2节。
ultisnips 提供相同代码段的快速输入,比如if-else
、switch-case
语句。在.vimrc
文件中添加如下配置:
|
|
ultisnips
补全时用于选中的键为tab
,与后面将要提到的插件YCM
的快捷键有冲突,所以提供改建的配置方式。个人选择改YCM
的快捷键。
|
|
另外需要说明的一点是,下载ultisnips
插件后,默认是没有提供模板补全用的文件的。需要自己下载。
一种方式时安装插件vim-snippets,复制~/.vim/bundle/vim-snippets/UltiSnips
整个文件夹到~/.vim/bundle/ultisnips
目录下面即可。
另一种是自己到github
上去下载, https://github.com/honza/vim-snippets ,其实内容都是一样的。我认为这个插件最好的点是支持自己定义,很强大。
基于标签的补全: 详情请参考 所需及所获:像使用IDE一样使用vim 5.3节部分。
基于语义的补全: 更多请参考 所需及所获:像使用IDE一样使用vim 5.3节部分。
YouCompleteMe 插件在安装过程中,参看文章的作者以及很多其他介绍YCM
插件使用的作者都有说到,YCM
原作者建议下载LLVM
官网提供的预编译二进制文件,以避免各种问题。
但我按照教程介绍,最后编译生成始终只有一个ycm_core.so
文件,也没有查找到原因,待优化。
然后后面我是按照YCM
原作者Git项目中README.md
文件中Ubuntu Linux x64
部分实现安装的,不需要手动下载库,按作者的顺序执行即可,需要比较长的时间。需要确认已安装Cmake
、python-dev
、python3-dev
,没有的话请自行安装。
更多请自行阅读原作者 README.md 。
YCM
插件需要在.vimrc
文件中添加配置:
|
|
|
|
另外还需要配置.ycm_extra_conf.py
文件以及引入标签补全,这里就不做详述,请自行参考介绍。
工程文件管理
NERDtree可以查看文件列表,要打开哪个文件,光标选中后回车即可在新buffer
中打开。在.vimrc
文件中添加如下配置:
|
|
|
|
更多请参考 所需及所获:像使用IDE一样使用vim 6.1节部分。
多文件编辑
Vim
中每打开一个文件Vim
就对应创建一个buffer
,多个文件就有多个buffer
,但默认你只看得到最后buffer
对应的Window,通过插件MiniBufExplorer可以切换到不同的buffer
及达到编辑多个文件的功能。在.vimrc
文件中添加配置:
|
|
|
|
buffer
快捷切换时,只需要在当前编辑文件中normal
下按快捷键切换(需要存在多个buffer),但是删除buffer
时,需要将光标定位到buffer
标签上。键入d
删除光标所在buffer
。
更多请参考 所需及所获:像使用IDE一样使用vim 6.2节部分。
自动对齐
|
|
后续补充。可自行搜索。
Markdown
Markdown
就不多解释了,在Vim
编辑过程中最大的需求就是实时预览,在这里介绍插件markdown-preview,能够实现在浏览器中实时预览,默认是谷歌浏览器Chorme
,自行下载。
需要说明的是,这款插件在Github上比较多,比如markdown-preview,不需要浏览器支持即可实时预览,供君选择。
vim-markdown 是一个语法高亮插件,根据实际情况使用。
在.vimrc
文件中添加配置:
|
|
|
|
基本上都是默认配置,除了打开/关闭的快捷键映射。更多的话,可以自己到Github看作者介绍。
其他配置
文件模板
新建源文件时,一般都会添加一些文件信息在文件开始的位置处。常见比如文件名、作者、创建时间、文件简介等等,如果每次都手动添加,就会很麻烦。所以可以通过添加脚本函数的方式,实现文件新建时自动添加。
在这里贴上一个.vimrc
文件的配置,可以参考他的实现方式: https://github.com/taizilongxu/dotfiles/blob/master/vimrc 。文件中其他也可以参考。
注意一点,如果需要判断是否为*.h
文件,头文件,请使用if expand("%:e")=='h'
进行判断。
自动添加时间
需要的话也是通过脚本函数实现。.vimrc
文件中添加配置:
|
|
关于这一段的解释和详细介绍请参考: http://www.cnblogs.com/soli/archive/2009/10/21/885044.html 。
结束语
第一次的环境配置就先这样了,后续有其他好用插件,会再推荐。文中还有没写完整的,会尽快补充。
没有特别认真的写,比较水,希望不要介意,能够提供一丁点的帮助,我觉得也是好的。谢谢。
参考
1、所需及所获:像使用IDE一样使用vim
2、.vimrc
3、.vimrc
4、.vimrc
5、vim配置技巧——在vim中使用autocmd命令在保存文件时自动插入最后修改日期和时间
6、Vim与Markdown共舞
7、NERD_commenter安装和使用