1、首先安装ctags
首先是ctags的安装,推荐使用exuberant ctags,我们可以从其官方网站上下载它的源码包,进行解压缩,编译,安装即可。
1)ubuntu安装
sudo apt-get install exuberant-ctags
( 或者下载 手动安装 download ctags-5.8.tag.gz (地址)
tar xzvf ctags-5.8.tag.gz
cd ctags-5.8
./configure
sudo make
sudo make install
)
至此,ctags的安装已经完成,可以使用ctags命令来检测时候完成安装。
检测:
在自己的项目文件夹下执行 $ctags -R * (不执行就起不到效果)
注:“-R”表示递归创建,也就包括源代码根目录(当前目录)下的所有子目录。“*”表示所有文件。这条命令会在当前目录下产生一个“tags”文件, 当用户在当前目录中运行vi时,会自动载入此tags文件。
然后就可以入手了。
常用的命令:
熟练的使用ctags仅需记住下面七条命令:(很简单吧,呵呵)
1. $ ctags –R * ($ 为Linux系统Shell提示符)
2. $ vi –t tag (请把tag替换为您欲查找的变量或函数名)
3. :ts (ts 助记字:tags list, “:”开头的命令为VI中命令行模式命令)
4. :tp (tp 助记字:tags preview)---此命令不常用,可以不用记
5. :tn (tn 助记字:tags next) ---此命令不常用,可以不用记
6. Ctrl + ]
7. Ctrl + T
最近打算配置好vim来阅读源代码。已经配置好了taglist,tags等。
但是发现ctags不能查看函数的被调用的地方,于是打算弄下cscope
brew install cscope 发现以前就安装过。
于是直接进入到源码目录下cscope -b
结果报错了 cscope: no source files found
百度无果,查看vim php cscope找到了解决办法。
默认情况下cscope值会在当前目录下针对c、iex和yacc(扩展名分别为.c、.h、.I、.y)程序文件进行解析(如果指定了-R参数则包含其自身的子目录)。
正确的姿势是:
手动生成cscope.files
find /your/absolute/path -name "*.php" >cscope.files
然后生成cscope.out
cscope -b
or:
cscope -Rbkq
配置vimrc
set cscopequickfix=s-,c-,d-,i-,t-,e-
在vim命令模式下加载.out文件
cs add cscope.out
使用
cscope命令说明
:cs find s function_name 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
:cs find g function_name 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
:cs find d function_name 查找本函数调用的函数
:cs find c function_name 查找调用本函数的函数 这个也比较有用处
:cs find t function_name 查找指定的字符串
:cs find e function_name 查找egrep模式,相当于egrep功能,但查找速度快多了
:cs find f function_name 查找并打开文件,类似vim的find功能
:cs find i function_name 查找包含本文件的文件
cscope定义快捷键
if has("cscope")
set csprg=/usr/bin/cscope
set csto=1
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
endif
set csverb
endif
nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-_>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR>
使用
1. 在函数处 按键 ctrl+/ s,自动跳转到第一个调用处,如果不满意,键入:cw
会在quickfix窗口展示整个列表。移过去回车就可以跳到你想要得地方。
2. 在变量处 按键 ctrl+/ c,自动跳转到第一个调用处,如果不满意,键入:cw
会在quickfix窗口展示整个列表。移过去回车就可以跳到你想要得地方。
进阶,命令生成cscope文件:
cscope中这样生成cscope.files
- find `pwd` -name "*.[ch]" -o -name "*.cpp" > cscope.files
- cscope -bR -i cscope.files<span style="" lang="EN-US"><span style="font-family:Times New Roman;"><span style="font-size:13px"></span></span></span>
上述命令中使用`pwd`取得绝对路径名,以防止使用cscope时出现找不到文件的情况;
命令cscope中的-i参数可以去掉,因为cscope缺省就是从当前目录的cscope.files中查找文件列表。
还有一个简洁的办法实现在当前目录下建立cpp文件和c文件混合的cscope.out;
在~/.bashrc中添加如下alias:
- alias mkcscopefile='find `pwd` -name "*.[ch]" -o -name "*.cpp" > cscope.files'
- alias mktag='ctags -R;cscope -bR'
然后,在terminal中source ~/.bashrc,就可以使用mkcscopefile;mktag命令来生成cscope.out和tags文件了。
如果路径中含有空格,需要使用sed对生成的cscope.files文件进行处理,命令:
sed -i ‘s/^/"/;s/$/"/' cscope.files
浙公网安备 33010602011771号