执行命令:sudo apt-get install exuberant-ctags安装ctags
安装成功后,要为源码文件生成tags文件,才可享受ctags为阅读代码带来的便利。
$ ctags -R
递归的为当前目录及子目录下的所有代码文件生成tags文件。
在vim打开源码时,指定tags文件,才可正常使用,通常手动指定,在vim命令行输入:
:set tags=./tags(当前路径下的tags文件)
若要引用多个不同目录的tags文件,可以用逗号隔开或者,设置~/.vimrc,加入一行,则不用手动设置tags路径:set tags=~/path/tags
设置好了tags文件,在定位变量或函数的定义时,最常用的快捷键是:Ctrl + ]
跳转到变量或函数的定义处,或者用命令:ta name
而使用快捷组合键Ctrl + o返回到跳转前的位置。
taglist插件是以vim脚本的形式存在,因此只需要将其下载下来放到相应的目录即可。taglist基于ctags才能发挥作用,因此在使用taglist之前,确保已经安装了ctags。具体安装方法如下:
下载地址(两个可选择任意一个):
Official site http://vim-taglist.sourceforge.net/
VIM online http://www.vim.org/scripts/script.php?script_id=273
下载解压后,将插件脚本文件(.vim)和帮助文件(.txt)分别放入/usr/share/vim/vim74/doc/中和/usr/share/vim/vim74/plugin/
中。
使用:在vim中,打开taglist窗口使用:Tlist (:TlistOpen, :TlistToggle)
关闭窗口可使用:Tlist (:TlistClose, :TlistToggle)
taglist窗口中可使用的快捷键:
跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样(但要在vimrc文件中打开此项功能)
o 在一个新打开的窗口中显示光标下tag
显示光标下tag的原型定义
u 更新taglist窗口中的tag
s 更改排序方式,在按名字排序和按出现顺序排序间切换
x taglist窗口放大和缩小,方便查看较长的tag
+ 打开一个折叠,同zo
- 将tag折叠起来,同zc
* 打开所有的折叠,同zR
= 将所有tag折叠起来,同zM
[[ 跳到前一个文件
]] 跳到后一个文件
q 关闭taglist窗口
显示帮助
其他一些设置选项可在vimrc脚本中添加,如:
"设置ctags路径
let Tlist_Ctags_Cmd = '/usr/bin/ctags'
"启动vim后自动打开taglist窗口
let Tlist_Auto_Open = 1
"不同时显示多个文件的tag,仅显示一个
let Tlist_Show_One_File = 1
"taglist为最后一个窗口时,退出vim
let Tlist_Exit_OnlyWindow = 1
"taglist窗口显示在右侧,缺省为左侧
let Tlist_Use_Right_Window =1
"设置taglist窗口大小
"let Tlist_WinHeight = 100
let Tlist_WinWidth = 40
"设置taglist打开关闭的快捷键F8
noremap :TlistToggle
"更新ctags标签文件快捷键设置
noremap :!ctags -R
还有许多其他的设置,请参考帮助文档:help taglist.txt
安装执行命令:$ sudo apt-get install cscope
执行cscope -Rbkq
这个命令会生成三个文件:cscope.out, cscope.in.out, cscope.po.out。
进入vim后第一件事是要把刚才生成的cscope文件导入到vim中来, 用下面的命令:
:cs add /XXX/cscope.out /xxx 上面这条命令很重要, 必须写全, 不能只写前半句:cs add /xxx/cscope.out
因为源码是多级目录的, 如果这样写, cscope是无法在子目录中的源码中工作的, 当然, 如果你的源码都在同一级目录中就无所谓了. 如果你要经常用cscope的话, 可以把上面那句加到~/.vimrc中去.
下面我们来操练一下, 查找函数vim_strsave()的定义, 用命令:cs find g vim_strsave
我想查找vim_strsave()到底在那些地方被调用过了, 用命令:cs find c vim_strsave
如果自动跳转的位置你不满意, 想看其他的结果, 可以用下面的命令打开QuickFix窗口:cw
cscope的主要功能是通过同的子命令”find”来实现的
“cscope find”的用法:
cs find c|d|e|f|g|i|s|t name
0 或 s 查找本 C 符号(可以跳过注释)
1 或 g 查找本定义
2 或 d 查找本函数调用的函数
3 或 c 查找调用本函数的函数
4 或 t 查找本字符串
6 或 e 查找本 egrep 模式
7 或 f 查找本文件
8 或 i 查找包含本文件的文件
如果每次查找都要输入一长串命令的话还真是件讨人厌的事情, Cscope的帮助手册中推荐了一些快捷键的用法, 下面是其中一组, 也是我用的, 将下面的内容添加到~/.vimrc中, 并重启vim:
nmap s :cs find s =expand(“”)
nmap g :cs find g =expand(“”)
nmap c :cs find c =expand(“”)
nmap t :cs find t =expand(“”)
nmap e :cs find e =expand(“”)
nmap f :cs find f =expand(“”)
nmap i :cs find i ^=expand(“”)$
nmap d :cs find d =expand(“”) 当光标停在某个你要查找的词上时, 按下g, 就是查找该对象的定义, 其他的同理.
按这种组合键有一点技巧,按了后要马上按下一个键,否则屏幕一闪就回到nomal状态了,g的按法是先按”Ctrl+Shift+-“, 然后很快再按”g”
1、安装Vundle
$git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
将vundle下载到.vim文件夹中,配置.vimrc文件。
2、通过Vundle下载YouCompletelMe插件,在~/.vimrc中添加:Bundle ‘Valloric/YouCompleteMe’
下载neocomplete
GitHub:https://github.com/Shougo/neocomplete.vim
CSDN:http://download.csdn.net/detail/spch2008/8828389
解压文件
将autoload 文件夹置于 ~/.vim/autoload
将plugin文件夹置于 ~/.vim/plugin
启用neocomplete
在 ~/.vimrc 中,写入: let g:neocomplete#enable_at_startup = 1