vim中ctags和cscope安装使用及错误

一、ctags

  "######################################## 

  下载网址:http://ctags.sourceforge.net/ 

  软件功能:用于产生一个tags文件(代码索引文件), 

  tags文件中记录的源文件的索引以帮助你快速得找到某个符号的定义。 

  它支持相当多的语言,如C、C++、C#、Shell等等。 

  后面所有的包括函数列表显示,变量定义跳转,自动补全等,都要依赖于它, 

  所以在此强烈推荐安装ctags插件。 

  安装配置:linux下,下载安装包,解压并安装。 

 

  $ tar -xzvf ctags-5.7.tar.gz 

  $ cd ctags-5.7 

  $ ./configure //亦可省略 

  # make 

  # make install //需要root权限 

  [配置]:可以在Normal Mode下,使用"set tags=.../tags"加载"tags"文件,也可以在_vimrc文件中做设置,后者举例: 

  set tags=~/usr/code/tags; //;号不能省略 

  set autochdir 

  常用命令:Ctrl+] 跳到声明定义处 

  Ctrl+T 跳回原处 

  (命令详情可参考上面的下载网址) 

  注意事项: 

  1), 先到源码目录(如果源码是多层的目录,就到最上层的目录,此处假设源码目录为D:/code/)下: 

  若是C, 运行命令" ctags -R * "以便产生tags文件, 

  若是C++运行命令" ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=c++ ", 

  在对C++文件进行补全时,OmniCppComplete插件需要tag文件中包含C++的额外信息,因此上面的ctags命令不同于以前我们所使用的, 

  它专门为C++语言生成一些额外的信息,上述选项的含义如下: 

  --c++-kinds=+p : 为C++文件增加函数原型的标签 

  --fields=+iaS : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S) 

  下表是我的vimrc中设置的键绑定,使用pumvisible()来判断下拉菜单是否显示,如果下拉菜单显示了,键映射为了一个值,如果未显示,又会映射为另一个值。 

  " mapping 

  inoremap <expr> <CR> pumvisible()?"\<C-Y>":"\<CR>" 

  inoremap <expr> <C-J> pumvisible()?"\<PageDown>\<C-N>\<C-P>":"\<C-X><C-O>" 

  inoremap <expr> <C-K> pumvisible()?"\<PageUp>\<C-P>\<C-N>":"\<C-K>" 

  inoremap <expr> <C-U> pumvisible()?"\<C-E>":"\<C-U>" 上面的映射都是在插入模式下的映射,解释如下: 

  如果下拉菜单弹出,回车映射为接受当前所选项目,否则,仍映射为回车; 

  如果下拉菜单弹出,CTRL-J映射为在下拉菜单中向下翻页。否则映射为CTRL-X CTRL-O; 

  如果下拉菜单弹出,CTRL-K映射为在下拉菜单中向上翻页,否则仍映射为CTRL-K; 

  如果下拉菜单弹出,CTRL-U映射为CTRL-E,即停止补全,否则,仍映射为CTRL-U; 

  2), 在_vimrc文件内设置"tags"文件所在目录,或者如果经常在这个工程编程的话,也可以将"tags"文件所在目录写到_vimrc文件中,这样VIM才能找到"tags"文件, 

  设置"tags"文件路径命令是: 

  set autochdir 

  set tags=code1/tags; 

  set tags=code2/tags; 

  注意tags项设置的目录后面的分号是必不可少的。因为它会让vim首先在当前目录里寻找tags文件, 

  如果没有找到tags文件,或者没有找到对应的目标,就到父目录中查找,一直向上递归。 

  3), 上面两点做到后,以gvim打开源代码, ctags即便生效。 

  因为tags文件中记录的路径总是相对于tags文件所在的路径,所以要使用第二个设置项来改变vim的当前目录。 

  4),这里有一个小瑕疵,你修改程序后,比如增加了函数定义,删除了变量定义,tags文件不能自动rebuild,你必须手动再运行一下命令":ctags -R"使tags文件更新一下。 

  5),tags目录如果数量多可以做成脚本,由_vimrc加载进来: 

  :if getfsize(".vimscript")>0 

  source .vimscript 

  :endif 

  编辑.vimscript文件,加入如下代码: 

  :set tags=/home/src/tags 

  6),当ctags使用ctags -R的命令,总是只能打出c的tag,但是c++的tag不能打出来



二、cscope 

  "######################################## 

  下载网址: http://cscope.sourceforge.net/ 

  软件功能: 用Cscope自己的话说:"你可以把它当做是超过频的ctags", 其功能和强大程度可见一斑吧。 

  cscope据说诞生就是为了来替代ctags的,因为他有着比ctags更加强大的功能,举个例子, 

  ctags只能分析出这个函数在哪里被定义,而cscope除了这一点之外,还能分析出这个函数再哪里被调用。 

  当然cscope目前还是有不少bug的,但是也不影响我们的使用。 

  安装配置:[安装]: 同ctags一样,需要安装。

  # ./configure 

  # make 

  # make install

使用:


如果只希望 Cscope 关联起所有的 .c 文件,那么可以直接到工程的根目录下,输入:
$ cscope -Rbq
-R 表示递归地把所有子文件夹中的 source file 也关联进来
-b 表示只建立数据库文件 cscope.out,不进入 Cscope 的 GUI 界面
-q 会建立两个额外的 'inverted index' file: cscope.in.out 和 cscope.po.out,以加快查找的速度
如果不希望把 /usr/include 中被工程文件包含的 .h 文件关联进来,就加 -k

如果要关联其他类型的文件(如 .cpp、.java等),就需要我们自己先生成一个 cscope.files,把所有我们希望关联进去的文件都列在里面:
$ find /home/edelweiss/nbd/nbd-2.9.15/ -name '*.c' -o -name '*.cpp' -o -name '*.h' \
> /home/edelweiss/cscope.files
注意查找的路径一定要写成绝对路径,这样才能保证写入到 cscope.files 文件中的也是绝对路径。
之后就可以根据 cscope.files 建立数据库了:
$ cscope -bq -i /home/edelweiss/cscope.files

如果生成数据库文件后,工程中的代码有所改动,最好重新生成一次那三个文件,否则查找結果可能与实际不匹配。

查看代码时常用的快捷键是 Ctrl+\ s(按住 Ctrl 不放,同时按 \,然后全部松开,按 s)。将光标放到想要查看所有出现位置的 C Symbol 上,按下上述快捷键,屏幕下方就会出现一个列表,输入序号并回车就能到达想去的地方。按下 Ctrl+t 可回到搜索前的位置。
直接在命令行查找可输入 “:cs f s symbol_name”
其他用法可以输入 “:cs” 查看或者参阅 manpage 和官网上的 Vim/Cscope Tutorial。


  "######################################## 

三、安装可能产生的错误:

http://sourceforge.net/projects/cscope/files/
下载 Cscope 最新版 15.7a(cscope-15.7a.tar.bz2)直接编译安装
如果 make 时出现“curses.h not found”之类的错误,则需要先安装“libncurses-dev”包

之后回到安装目录

make clean

make distclean

再make

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值