您的位置:首页 > 运维架构

vim+ctags+cscope(工欲善其事,必先利其器。)

2013-06-12 20:33 316 查看
1.vim ~/.vimrc

set encoding=utf-8

set fenc=cp936

set fileencodings=utf-8,uc

set termencoding=gbk

set tabstop=4

set ruler

set nu

set hlsearch "高亮搜索

set cursorline

syntax enable

colorscheme desert

set autochdir “这两句实现vim对tags的自动递归查找,主要第二句的分号不能少

set tags=tags;

2、ctags:

tar -zxvf ctags-5.5.tar.gz

cd ctags-5.5

./configure

make

sudo make install

在ubuntu12.04下可以apt-get install ctags

使用方法:

ctrl + ] -----------> 跳到函数或变量的定义处

ctrl + t -------------> 返回(ctrl + o亦可)

gf --------------> 跳到头文件定义的地方

gd ---------------->把鼠标放在函数或变量上,会高亮当前文件中搜索到的函数或变量

gg ---------------->回到当前文件第1行

shift + g -------------->回到文件文件最后1行

3、cscope

Vimer初成长,Vim + ctags + cscope 这个组合基本是每个Vimer的必备吧。虽然ctags已经足够强大,但是cscope可以做的更多。下面来分享下自己的vimrc脚本关于cscope的一部分,该脚本可以实现在项目的任一子目录下,自动的向上查找cscope.out,并把他add进来。



首先来分享一个小脚本,可以帮助我们在项目中生成cscope.out 和ctags。

我把这个文件命名为cs.sh

[java] view plaincopy

1. #!/bin/sh

2. find . -name "*.h" -o -name "*.c" -o -name "*.cpp" -o -name "*.java"\

3. >cscope.files

4. cscope -bkq -i cscope.files

5. ctags -R





需要的注意的是,上面的脚本中,生成的cscope.files中保存的是相对路径,而不是绝对路径。这样的话,在cscope 中查找tags的时候,是没法打开相应的包含查找结果的文件的。怎么避免这个问题呢?有如下两个方法:

1, 在cs.sh的脚本中,find命令后接一个变量PRO_PATH,这个PRO_PATH是当前项目的跟目录,这个时候cscope.files中保存的就是所有项目文件的绝对路径了。

2,在:cs add的时候,接一个prepend path

[java] view plaincopy

1. :cs add [cscope.out] [pre-path]



我用了第二个方法,所以就有了下面的vimrc片段,

[java] view plaincopy

1. if has("cscope")

2. set csprg=/usr/bin/cscope

3. set csto=0

4. set cst

5. set csverb

6. set cspc=3

7. "add any database in current dir

8. if filereadable("cscope.out")

9. cs add cscope.out

10. "else search cscope.out elsewhere

11. else

12. let cscope_file=findfile("cscope.out", ".;")

13. let cscope_pre=matchstr(cscope_file, ".*/")

14. if !empty(cscope_file) && filereadable(cscope_file)

15. exe "cs add" cscope_file cscope_pre

16. endif

17. endif



使用时,将光标停留在要查找的对象上,按下<C-@>g,即先按“Ctrl+@”,然后很快再按“g”,将会查找该对象的



4、参考网页:

http://my.oschina.net/u/554995/blog/59927
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: