vim+taglist+ctags安装使用笔记

时间:2023-02-06 17:22:58

(1)ctags的安装

到 http://prdownloads.sourceforge.net/ctags/ctags-5.6.tar.gz下载ctags源码 解压并安装,./configure,make,make install; (2)taglist安装

 taglist插件是以vim脚本的形式存在,因此只需要将其下载下来放到相应的目录即可。taglist基于ctags才能发挥作用,因此在使用taglist之前,确保已经安装了ctags。具体安装方法如下:
下载地址(两个可选择任意一个):
Official site  http://vim-taglist.sourceforge.net/
VIM online  http://www.vim.org/scripts/script.php?script_id=273
下载解压后,将插件脚本文件plugin和帮助文件doc分别放入vim常用目录:$HOME/.vim/ 或$HOME/vimfiles/ 或$VIM/vimfiles/下

(3)ctags的使用

1.对于一个工程文件夹建立ctags文件:在该目录下运行 ctags -R          "-R"表示递归创建,也就包括源代码根目录下的任何子目录下的源程式(如果你的源码是多层的目录, 就去最上层的目录)。从而在src目录下建立了一个“tags”文件,"tags"文档中包括这些对象的列表。如果修改程序后,比如增加了函数定义,删除了变量定义,tags文件不能自动rebuild,必须再次在当前"tags"文件所在的目录下运行 $ctags -R。2.快捷键:把光标移到变量名或函数名上,然后按下"Ctrl-]"前往该变量名函数名定义处。用"Ctrl-o"或“Ctrl-t”退回原来的地方。 
<2>     在函数中移动光标
[{     转到上一个位于第一列的"{"
}]     转到下一个位于第一列的"{"
{      转到上一个空行
}      转到下一个空行 ([ and ] 也分别是两个指令)
gd   转到当前光标所指的局部变量的定义
*      转到当前光标所指的单词下一次出现的地方
#     转到当前光标所指的单词上一次出现的地方
错误解决: (1)顶层目录下已经有了tags;

报错:cstag:tag not found

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

解决办法是在在vim的配置文件~/vimrc添加set tags=tags;或者set tags=(tags文件的路径)

(2)E432:Tags file not sorted
其实这个问题实际上是由于在使用ctags -R命令时,就已经报错Tags file not sorted,这个错误附带的提示是根目录空间不够,我的解决方法是,由于生成的临时文件是在/tmp目录下,所以我将/tmp目录绑定到了一块新的分区中,解决的该问题。 不过,在这一过程中,我看到当源代码稍大时(80M),生成的tag文件相当的大(3.1G),生成了最多8到9个临时文件,每个文件500M,可见catgs还是相当占用空间的。

(4)taglist的使用

1.切换函数列表的开、关

使用  “:TlistToggle” 在打开和关闭间切换。

可以用 “:TlistOpen” 打开taglist窗口,用“:TlistClose”关闭taglist窗口。

 在vimrc中使用如下面的映射,就可以使用 “,tl”  键就可以打开/关闭taglist窗口:map tl :TlistToogle

2.在正常编辑区域和tags区域中切换 

ctrl+w+w

3.定位指定内容 

在tags区域中,把光标移动到变量、函数名称上,然后敲回车(或者是双击某个tag),就会自动在正常编辑区域中定位到指定内容了。 在taglist窗口中,可以使用下面的快捷键 : 跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样 
o 在一个新打开的窗口中显示光标下tag 
(空格) 显示光标下的tag的原型定义,在vim 
u 更新taglist窗口中的tag 
s 更改排序方式,在按名字排序和按出现顺序排序间切换 
x taglist窗口放大和缩小,方便查看较长的tag 
+  开一个折叠,同zo 
- 将tag折叠起来,同zc 
* 打开所有的折叠,同zR 
= 将所有tag折叠起来,同zM 
[[ 跳到前一个文件 
]] 跳到后一个文件 
q 关闭taglist窗口 
显示帮助。Taglist插件还提供了很多Ex命令,甚至可以用这些命令创建一个taglist的会话,然后在下次进入VIM时加载此会话。

我们在关联一个函数或者一个变量定义的时候,经常有多处地方定义了相同名字,需要定位正确的定义地方。

:ts 或 tselect 查看有相同地方的定义

:tn或tnext   查找下一个定义地方。

:tp   查找上一个地方。

:tfirst  到第一个匹配

:tlast 到最后一个匹配