Chen Jian

导航

 

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

原创 2012年07月11日 18:25:31
 


[plain] view plain copy
  1. find `pwd` -name "*.[ch]" -o -name "*.cpp" > cscope.files  
  2. 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:

[plain] view plain copy
  1. alias mkcscopefile='find `pwd` -name "*.[ch]" -o -name "*.cpp" > cscope.files'  
  2. alias mktag='ctags -R;cscope -bR'  

然后,在terminal中source ~/.bashrc,就可以使用mkcscopefile;mktag命令来生成cscope.out和tags文件了。

如果路径中含有空格,需要使用sed对生成的cscope.files文件进行处理,命令:

sed -i ‘s/^/"/;s/$/"/' cscope.files

 
posted on 2017-12-04 16:44  Chen Jian  阅读(1661)  评论(0)    收藏  举报