vim:vim插件ctags的安装和使用

vim插件ctags的安装和使用

https://blog.csdn.net/G_BrightBoy/article/details/16830395

https://blog.csdn.net/turkeyzhou/article/details/8784899

【ctags功能】:

       为源码的变量/对象、结构体/类、函数/接口、宏等产生索引文件,以便快速定位。目前支持41种语言,这里仅以C/C++为例:ctags可以产生c/c++语言所有类型的索引文件,具体如下:

 
  1. -> class names(类名)

  2. -> macro definitions(宏定义)

  3. -> enumeration names(枚举名)

  4. -> enumerators(枚举变量)

  5. -> function definitions(函数定义)

  6. -> function prototypes/declarations(函数定义/声明)

  7. -> class, interface, struct, and union data members(类,接口,结构体,联合体)

  8. -> structure names(结构体名)

  9. -> typedefs(别名)

  10. -> union names(联合体名)

  11. -> variables (definitions and external declarations)变量


【ctags的安装】
1)在线安装:

sudo apt-get install ctags (ubuntu)

(RedHat系列使用:yum install ctags)
若不成功,可能是因为源的问题,换一下软件源update后重新执行上述命令即可。
2)手动下载安装:
下载地址
Official site: http://ctags.sourceforge.net/
VIM online: http://www.vim.org/scripts/script.php?script_id=610
参考步骤(以5.8版本ctags-5.8.tar.gz为例)
解压后
$ cd ctags-5.8
$ ./configure
$ make
# make install
安装结束后,使用ctags命令测试是否成功
或whatis ctags, whereis ctags等

【生成tags文件】
 安装成功后,要为源码文件生成tags文件,才可享受ctags为阅读代码带来的便利。

$ ctags -R
递归的为当前目录及子目录下的所有代码文件生成tags文件

为某些源码生成tags文件,使用如下命令
$ ctags filename.c filename1.c file.h

$ ctags *.c *.h

为了使得字段补全有效,在生成tags时需要一些额外的参数,推荐的c++参数主要是:
ctags -R --c++-kinds=+px --fields=+iaS --extra=+q
其中:
选项c++-kinds 用于指定C++语言的 tags记录类型,  --c-kinds用于指定c语言的,  通用格式是  --{language}-kinds
选项 fileds 用于指定每条标记的扩展字段域
extra 选项用于增加额外的条目:   f表示为每个文件增加一个条目,  q为每个类增加一个条目


【使用方法】
在vim打开源码时,指定tags文件,才可正常使用,通常手动指定,在vim命令行输入:
:set tags=./tags(当前路径下的tags文件)
若要引用多个不同目录的tags文件,可以用逗号隔开

或者,设置 ~/.vimrc,加入一行,则不用手动设置tags路径:
set tags=~/path/tags

若要加入系统函数或全局变量的tag标签,则需执行:
ctags -I __THROW –file-scope=yes –langmap=c:+.h –languages=c,c++ –links=yes –c-kinds=+p --fields=+S -R -f ~/.vim/systags /usr/include /usr/local/include
并且在~/.vimrc中添加(亦可用上面描述的手动加入的方式):
set tags+=~/.vim/systags
这样,便可以享受系统库函数名补全、原型预览等功能了。

如果经常在不同工程里查阅代码,那么可以在~/.vimrc中添加:
set tags=tags;
set autochdir

设置好了tags文件,在定位变量/函数的定义时,最常用的快捷键是:
Ctrl + ]
跳转到变量或函数的定义处,或者用命令
:ta name
而使用快捷组合键
Ctrl + o/t
返回到跳转前的位置。

另外,ctags不会生成局部变量的索引,不过可以使用gd组合键(对光标所在处的word进行快捷查找定位)来定位,也是相当快捷的。

$ vim -t myAdd
用vim打开文件时,添加参数-t funcName会自动打开定义该函数的文件并定位到定义首行,上面这句就是找到myAdd定义的文件打开并将光标置于定义的第一行处。

:tags
会列出查找/跳转过程(经过的标签列表)


另外,附上vim环境中其他较为好用的快捷键:
* 定位至当前光光标所指单词的下一次出现的地方
# 定位至当前光光标所指单词的上一次出现的地方
n 定位至跳至已被标记出的单词下一次出现的地方
shift+n 定位至跳至已被标记出的单词上一次出现的地方


关于更详细的ctags用法,vim中使用
:help tags

使用 ctags -R,再用vim打开其目录下的源文件时,出现了

cstag:tag not found

但是已经在顶层目录下已经有了tags;

这是因为源文件在当前目录下没有找到tags文件,

解决办法是在在vim的配置文件~/vimrc添加set tags=tags;

使如果源文件在当前文件夹下没有找到tags,可以到它的上层目录下继续寻找;

ctags文件绝对路径修正

2013年04月10日 20:09:39

阅读数:3288

我们利用ctags生成当前目录的tags文件并放到别的目录

ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ --exclude=.svn --exclude=c++ --exclude=asm* -f ~/coreycui/coreytags/gcc/tags

会发现tags生成的地址是相对地址,导致我们在vim中时候ctrl+]无法定位,如果此时我们添加了--tag-relative即可,但是--tag-relative只能保证你的path和tag目录是相对的,tags文件依然无法移动。

利用awk命令进行纠正

cat tags | awk -F '\t' '{print $1"\t/usr/include/"$2"\t"$3"\t"$4"\t"$5"\t"$6"\t"$7"\t"$8"\t"$9"\t"$10"\t"$11"\t"$12"\t"$13"\t"$14"\t"$15"\t"$16"\t"$17"\t"$18}'

即可正常使用。

猜你喜欢

转载自blog.csdn.net/hunter___/article/details/81806453