1.ctags
(1)到
下载ctags源码ctags-5.6.tar.gz
(2)解压并安装
假设在家目录下taogle用户的目录下:
tar zxvf ctags-5.6.tar.gz
cd ctags-5.6
./configure && make && make install
(3)使用
<1> 对于一个工程文件夹如:cd /home/taogle/vimPlungTest/src
<2> 建立ctags文件,在该目录下运行 ctags -R
—— "-R"表示递归创建,也就包括源代码根目录下的任何子目录下的源程式(如果你的源码是多层的目录, 就去最上层的目录)。从而在src目录下建立了一个“tags”文件,"tags"文档中包括这些对象的列表。
如果修改程序后,比如增加了函数定义,删除了变量定义,tags文件不能自动rebuild,必须再次在当前"tags"文件所在的目录下运行 $ctags -R
l 用#define定义的宏
l 枚举型变量的值
l 函数的定义、原型和声明
l 名字空间(namespace)
l 类型定义(typedefs)
l 变量(包括定义和声明)
l 类(class)、结构(struct)、枚举类型(enum)和联合(union)
l 类、结构和联合中成员变量或函数
VIM用这个"tags"文档来定位上面这些做了标记的对象
注意:
运行vim的时候,必须在"tags"文档所在的目录下运行。否则,对于该例子还要在运行vim的时,用 " :set tags= /home/taogle/vimPlungTest/src " 命令来设定"tags"文档的路径,这样vim才能找到"tags"文档。
如果经常在这个工程编程的话,可以将 " set tags= /home/taogle/vimPlungTest/src "这句话写进~/.vimrc 文件中去直接作为vim的配置文件。当然这个路径随着工程目录的变化要随时作调整。(切记tags后面的"="一定不能有空格,否则vim会报 E518错误 )
强烈推荐以下的方法:在vimrc中加入以下的句子:
if getfsize("vimscript")>0
source vimscript
endif
然后在工程tags文件所在的目录下(如:" /home/taogle/vimPlungTest/src" )新建一个叫做“vimscript”的文件,在文件中添加以下的内容:
set tags= /home/taogle/vimPlungTest/src "或者 /home/taogle/vimPlungTest/src/tags
set tags+= /home/taogle/vimPlungTest/src/tags.lib "这一句通常可以没有
这样每次启动vim就会自动运行vimscript脚本中的句子,从而可以自动找到tags所在的目录。
并在vimscript文件中加入如下一行就可实现在vim中每次打开vim编辑时都重新生成关于c++的tags文件:
! ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=c++
—— ! command //实现在vim中运行shell
或者为了更加简单 ,在vimrc中添加以下的句子,就可以在进入vim后,按下Ctrl+F12组合键(每当有代码更新的时候,时不时按下以更新tags),在当前目录下寻找所有的c/c++文件,从而在当前目录下建立tags文件:
map :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
快捷键:
<1> 把光标移到变量名或函数名上,然后按下"Ctrl-]"。用"Ctrl-o"或“Ctrl-t”退回原来的地方。
<2> 在函数中移动光标
[{ 转到上一个位于第一列的"{"
}] 转到下一个位于第一列的"{"
{ 转到上一个空行
} 转到下一个空行 ([ and ] 也分别是两个指令)
gd 转到当前光标所指的局部变量的定义
* 转到当前光标所指的单词下一次出现的地方
# 转到当前光标所指的单词上一次出现的地方
2. taglist
taglist的功能是即时生成当前文件的函数列表和全局变量列表,便于索引。 能够列出源文档中的tag(function, class, variable, etc)并跳转.
注意:taglist依赖于ctags,所以要先装ctags,否则taglist装了也没法用!
(1) 在 下载得到 taglist_42.zip
(2)解压得到两个文档(假设在zip文件在/home/taogle文件夹下)
cd /home/taogle
$ unzip -d taglist taglist_42.zip
$ cd taglist
$ tree
.
|-- doc
| `-- taglist.txt
`-- plugin
`-- taglist.vim
(3)安装
cp doc/taglist.txt /usr/share/vim/vim72/doc/ --taglist 帮助文件
cp plugin/taglist.vim /usr/share/vim/vim72/plugin/ -- taglist 插件
(4)配置和使用
启动vim,可使用 “:helptags .”来配置好帮助文件,并能够用来查看;
重启vim,用“:TlistToggle”来打开和关闭taglist窗口。
在 /usr/share/vim/中的文件vimrc中添加关于taglist的常用配置命令如下:
==============================
let Tlist_Ctags_Cmd = '/usr/bin/ctags' "设定Linux系统中ctags程序的位置
let Tlist_Show_One_File=1 "不同时显示多个文件的tag,只显示当前文件的
let Tlist_Exit_OnlyWindow=1 "如果taglist窗口是最后一个窗口,则退出vim
let Tlist_Use_Right_Window = 1 "在右侧窗口中显示taglist窗口
"let Tlist_Use_SingleClick= 1 " 缺省情况下,在双击一个tag时,才会跳到该tag定义的位置
let Tlist_Auto_Open=1 "在启动VIM后,自动打开taglist窗口
let Tlist_Process_File_Always=1 "taglist始终解析文件中的tag,不管taglist窗口有没有打开
let Tlist_File_Fold_Auto_Close=1 "同时显示多个文件中的tag时,可使taglist只显示当前文件tag,其它文件的tag都被折叠起来
==============================
(5)使用
<1> 切换函数列表的开、关
==> 或者使用 “:TlistToggle” 在打开和关闭间切换
==> 可以用 “:TlistOpen” 打开taglist窗口,用“:TlistClose”关闭taglist窗口。
==> 在vimrc中使用如下面的映射,就可以使用 “,tl” 键就可以打开/关闭taglist窗口:
map tl :TlistToogle
<2> 在正常编辑区域和tags区域中切换
ctrl+w+w
<3> 定位指定内容
在tags区域中,把光标移动到变量、函数名称上,然后敲回车(或者是双击某个tag),就会自动在正常编辑区域中定位到指定内容了。
在taglist窗口中,可以使用下面的快捷键 :
跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样
o 在一个新打开的窗口中显示光标下tag
(空格)显示光标下的tag的原型定义,在vim
u 更新taglist窗口中的tag
s 更改排序方式,在按名字排序和按出现顺序排序间切换
x taglist窗口放大和缩小,方便查看较长的tag
+ 打开一个折叠,同zo
- 将tag折叠起来,同zc
* 打开所有的折叠,同zR
= 将所有tag折叠起来,同zM
[[ 跳到前一个文件
]] 跳到后一个文件
q 关闭taglist窗口
显示帮助
Taglist插件还提供了很多Ex命令,甚至可以用这些命令创建一个taglist的会话,然后在下次进入VIM时加载此会话。
Taglist插件还可以与winmanager插件协同使用。
3. omnicppcomplete 插件(让vim支持代码自动补全)
插件:omnicppcomplete
软件:ctags
ctags一般系统默认就有。
下载并安装插件 omnicppcomplete:
假设在家目录下存在.vim文件夹, 如: /home/taogle/.vim,如果不存在,在家目录下建立.vim目录;然后使用以下的命令:
unzip omnicppcomplete-0.41.zip -d /home/taogle/.vim (或者使用:$HOME/.vim)
从而在 /home/taogle/.vim下面解压出after、autoload、doc三个文件夹。至此 omnicppcomplete的安装已经完成。
千万要注意 :在unzip前面不能加sudo,否则会使得解压出的三个文件夹属性为不可写(no write),从而造成 omnicppcomplete的不可用,关于此,笔者有惨痛的教训见以下的帖子:
再运行vim,然后在vim的命令模式下输入 :helptags $HOME/.vim/doc ,这样可以添加omnicppcomplete的帮助文件到vim。
你可以继续输入:h omnicppcomplete来查看插件提供的文档,里边有安装和使用的所用方法。
在你的vim配置文件(~/.vimrc,没有可以新添加一个)加上以下几句:
set nocp
filetype plugin on
//可选项
set completeopt=longest,menu
set completeopt=menuone
使用方法:
omnicppcomplete主要依赖ctags生成的tags文件来判断补全的,所以首先应该生成一定的信息。也就是说应该先把类写好,然后再生成tags,以后出现对象的 ”.” 或 ”->”成员操作时它自动寻找成员函数。
在vim编辑文件时按Ctrl+F12,ctags会把这个文件所在目录以及子目录的所有文件信息收集生成一个名为tags的文件存在当前编辑文件所在目录。然后就可以实现代码自动补全咯。 在~/.vimrc中添加的 map…… 那句宏就实现这个功能。注意,如果要让新编写的文件可以使用则需先写入,命令为 :w
如果在补全时受不了[预览]窗口的打扰可以打开vim配置文件加入
set completeopt=menu
4.NERD_commenter.vim
注释插件,用来注释掉代码的工具,支持“//”、“/* */”两种代码注释方式。
下载插件
安装很简单,将解压的doc文件放在vimfile/doc下,另一个vim文件放在vimfile/plugin下面……
也是程序员非常实用的一款插件,支持各种语言的补全,只要你能想到的,放心他绝对注释的了,而且还支持单行注释,批量注释,等各种命令映射,在这里,我把最常用的键映射在vimrc中配置了一下。
"对NERD_commenter的设置
let NERDShutUp=1
"支持单行和多行的选择,//格式
map ,c
这样的话,在光标所在行上,按下一次ctrl+h是注释,再按下一次是取消注释。
而其内建的指令,cm是多行注释,类似C++的/**/,,cu是取消注释。
其他的命令:
在Normal或者Visual 模式下:
* ,ca,在可选的注释方式之间切换,比如C/C++ 的块注释/* */和行注释//
* ,cc,注释当前行
* ,c,切换注释/非注释状态
* ,cs,以”性感”的方式注释
* ,cA,在当前行尾添加注释符,并进入Insert模式
* ,cu,取消注释
* Normal模式下,几乎所有命令前面都可以指定行数
* Visual模式下执行命令,会对选中的特定区块进行注释/反注释
5.DoxygenToolkit.vim 由注释生成文档,并且能够快速生成函数标准注释
下载地址
安装:将下载的DoxygenToolkit.vim直接放在vimfile/plugin文件夹下面……
配置:
map fg : Dox
map fn: DoxAuthor
map fl: DoxLic
let g:DoxygenToolkit_authorName="Taogle"
let g:DoxygenToolkit_licenseTag="My own license\"
let g:DoxygenToolkit_undocTag="DOXIGEN_SKIP_BLOCK"
let g:DoxygenToolkit_briefTag_pre = "@brief\t"
let g:DoxygenToolkit_paramTag_pre = "@param\t"
let g:DoxygenToolkit_returnTag = "@return\t"
let g:DoxygenToolkit_briefTag_funcName = "no"
let g:DoxygenToolkit_maxFunctionProtoLines = 30
这样在vim的normal模式下,将光标放到文件的头部,按下fn就会对文件加上文档注释
将光标放到函数的定义的前面一行,按下fg就会对函数进行注释
按下fl,进行授权注释
6.a.vim .cpp和.h文件快速切换
下载地址
把下载的a.vim放到plugin下,不需要配置。
直接可以:A,打开.cpp和.h对应的文件,:AV,打开.cpp和.h对应的文件,并且分屏显示
或者在vimrc中写下如下的映射,快捷键映射
map av : AV (最常用)
还有其他的几个命令如下:
:A switches to the header file corresponding to the current file being edited (or vise versa)
:AS splits and switches
:AV vertical splits and switches
:AT new tab and switches
:AN cycles through matches
:IH switches to file under cursor
:IHS splits and switches
:IHV vertical splits and switches
:IHT new tab and switches
:IHN cycles through matches
因为这个插件都依赖于ctags管理的tags数据,所以新编辑的内容不会立即起效。所以应该时不时按下Ctrl-F12更新tags。
7. AddCppClass: 帮助你快速添加一个C++类
安装方法同4.NERD_commenter
可以在vimrc中设置快捷键
map cs : AddCppClass
从而在使用时,在normal模式下按下cs就可以提示添加一个类……
8.grep.vim,在工程中快速查找
下载:
安装方法同6. a.vim
常用命令--> :Grep
但是这个插件挺难用的,只能慢慢摸索着用了