ubuntu 下搭建c++ 的vim代码阅读环境
最近阅读jvm的源码,而这是C++的,需要在Ubuntu下面阅读代码,本文将会讲一下在ubuntu下如何大家一个c++的代码阅读环境。主要包含NERDTree、auto-pairs、ctags、 taglist.
一、安装pathogen
为了不让插件安装后目录显得凌乱,我们很有必要安装一个管理插件的插件,这样功能的插件有好几个,这里只推荐一个pathogen
项目地址
https://github.com/tpope/vim-pathogen
安装
可以通过git安装,也可以直接下载插件文件,由于这个插件只有一个文件,我们选择后者,而该插件的说明文档上也是用的这种方法。
mkdir -p ~/.vim/autoload ~/.vim/bundle &&
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
然后,就没有然后,这个插件就安装完了。是不是觉得so easy! 不过先别急,我们还要对插件进行一些配置,用vim打开~/.vimrc,输入如下三行类容
execute pathogen#infect()
syntax on
filetype plugin indent on
保存退出,这个插件的安装配置就完成了,怎么验证插件有没有生效呢,别急,后面有的是机会验证。
此时你的~/.vim目录结构应该是这样的
├── autoload
│ └── pathogen.vim
└── bundle
可见/.vim目录下是有两个目录,其中autoload放的是pathogen插件,所谓的插件其实就是一个脚本,当vim启动时,它会自动加载/.vim/autoload目录下的脚本,由于你~/.vimrc里配置了execute pathogen#infect(),所以它会去自动的执行脚本里这个函数,至于这个函数是怎么实现的,我们不用管它,总之这个函数的功能就是去加载~/.vim/bundle目录下你安装的所有插件,pathogen的管理方法大致就是这样,而我们也看到,vim的插件其实就是一个脚本文件,丰富一点的还会带有说明文档等其它内容,后面我们碰到了再讲解。
二、auto-pairs
项目地址
https://github.com/jiangmiao/auto-pairs
功能
自动匹配括号、引号等
安装
git clone git://github.com/jiangmiao/auto-pairs.git ~/.vim/bundle/auto-pairs
这样就将auto-pairs在github上的项目文件下载到了~/.vim/bundle/auto-pairs目录下
三、NERDTree
项目地址:
https://github.com/scrooloose/nerdtree
功能:
显示目录树
安装:
git clone https://github.com/scrooloose/nerdtree.git ~/.vim/bundle
此时~/.vim/bundle/nerdtree下应该有如下几个目录和文件
autoload
doc
lib
nerdtree_plugin
plugin
README.markdown
syntax
这几个目录是vim默认的插件目录,如果我们不是通过pathogen加载插件,就需要在/.vim目录下创建对应的这几个目录,并将NERDTree对应的文件拷到相应的目录,这样每个目录下会放置多个插件的内容,比如/.vim/doc下就会放置所有插件的帮组文档,而我们通过pathogen来管理,每个插件的所有内容都放在同一个目录中,比如这里的NERDTree插件的内容我们下载到了~/.vim/bundle/nerdtree下,直接删除这个目录即可删除插件,如果后续插件有更新,在该目录下通过git命令也可以很容易更新到最新版本。
打开vim,在命令行模式下输入:Helptags载入插件的帮组文档,或者用:helptags help_dir载入指定目录的帮组文档,其中help_dir是你需要加载的插件帮组文档所在的目录,比如这里是~/.vim/bundle/nerdtree/doc
测试
用vim打开一个文件,在命令行模式下输入:NERDTree,然后回车,窗口左侧就出现了vim工作目录的目录树,
将光标置于NERDTree窗口,按'?'可查看帮助,NERDTree的操作很简单,通常是将光标置于一个目录/文件上,通过一个按键来操作,下面列出几个常用按键及其对应的操作
文件相关操作
o : 在光标所在的上一个窗口打开文件,并将光标置于新打开的窗口
go : 预览文件,光标停留在NERDTree窗口中
t : 在新标签中打开文件并激活
gt : 在新标签打开文件,光标留在NERDTree窗口中
i : 水平分割打开文件
gi : 水平分割预览
s : 垂直分割打开文件
gs : 垂直分割预览
目录树相关操作
o : 展开/关闭目录
O : 递归展开目录。慎用,如果目录层级多,打开会很慢
x : 关闭父目录
C : 切换光标所在目录为根目录
u : 切换目录树的根目录为上层目录
U : 切换目录树的根目录为上层目录,并保持旧的目录树的状态
r : 刷新当前目录
R : 刷新当前根目录(这个在新加入文件后会用到)
cd : 切换vim工作目录为光标所在目录(命令模式下:pwd可查看当前工作目录)
为了方便打开NERDTree,我们可以设置快捷键,打开~/.vimrc,插入如下一行
map <C-n> :NERDTree<CR>
这样,当打开vim时,只要输入ctrl+n即可打开NERDTree
比较常用的功能:
ctrl + w + w : 左右屏之间切换
四、ctags
ctags可以建立源码树的索引,使程序员在编程时能迅速定位函数,变量,宏定义等位置去查看原型.以下是在Ubuntu下vim中ctags的下载安装和配置过程:
下载并安装ctags,在终端输入如下命令:
apt-get install ctags
建立源码索引
比如我经常需要查阅Linux的内核代码,而这些代码放在/root/linux-2.6.14目录下,那么在终端进入到该目录后,输入命令ctags -R,你会发现多了一个tags文件,这个就是索引文件.
向vim注册索引文件tags的路径 (这一步经常忘记)
用root用户在终端输入vim /etc/vim/vimrc,在打开文件的最后添加一行(具体路径根据你自己的情况而定):
set tags=/root/linux-2.6.12/tags
然后关闭终端重新打开,你就可以用vim在任意地方查看有关Linux的函数原型.把光标停留在某个函数上上,然后按 Ctrl+],vim就会会自动跳到该函数处,这时我们能查看该函数的原型,查看完了,按Ctrl+o或者Ctrl+T就可以回到原来的地方.
如果修改了程序后,比如增加了函数定义,删除了变量定义,tags文件不能自动rebuild,你必须手动再运行一下命令:
ctags -R 使tags文件更新一下,不过让人感到欣慰的是vim不用重新启动,正在编写的程序也不用退出,马上就可以又正确使用<Ctrl+]和Ctrl+T或者Ctrl+o了. g]不跳转,列出有多少个tags可选.
ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++
多个tag的选择 :
刚才查了查vim的帮助发现:tag在有多个匹配结果的时候就是默认跳转到第一个匹配结果,如果要选择应该用:ts。
五、taglist
Taglist是以tags文件为基础,需要ctags生成tags文件。
安装
安装ctags,Redhat和CentOS可以执行yum install ctags,Debian和Ubantu可以执行apt-get install ctags
下载Taglist,地址是http://sourceforge.net/projects/vim-taglist/files/vim-taglist/
** 这个地址打不开的话,可以直接 从我的网盘中下载:
链接: https://pan.baidu.com/s/1TqMKcfZ34jjqLKhXathPUA 密码: t2fr
解压taglist_45.zip,可以看到有两个目录doc和plugin,结构如下
[图片上传中...(image-80659f-1521507946784-1)]
taglist_45
|
|-------- doc
| |-------- taglist.txt
|
|-------- plugin
||-------- taglist.vim
在~/.vim/bundle 文件夹中新建文件夹taglist
mkdir -p ~/.vim/bundle/taglist
然后将加压之后的doc和plugin文件夹copy到上述~/.vim/bundle/taglist 中就可以了。
配置
打开~/.vimrc, 添加如下配置即可
"
" taglist
"
let Tlist_Show_One_File=1 "只显示当前文件的tags
let Tlist_WinWidth=40 "设置taglist宽度
let Tlist_Exit_OnlyWindow=1 "tagList窗口是最后一个窗口,则退出Vim
let Tlist_Use_Right_Window=1 "在Vim窗口右侧显示taglist窗口
参考文献
1、http://blog.csdn.net/doc_sgl/article/details/47205779
2、http://www.cnblogs.com/caosiyang/archive/2011/12/23/2299190.html