分类:学习
使用tags

   tags是定义标识符的地方。例如在c和c++程序中的函数定义。tags的列表在一个tags文件中维护。这个可以被vim用以直接的从任何地方跳转到tag,也就是定义了标识符的地方。

  如果要成成所有当前目录下的C文件的tags文件,使用如下命令:

     ctags *.c

 ctags是一个独立的程序。多数Unix系统已经自动安装了它。如果没有安装,请访问如下地址:

   http://ctags.sf.net

 现在当你在vim中并且希望到达一个函数定义的时候,你可以使用如下命令进行跳转了:

   :tagstartlist

  这个命令将会发现函数“startlist”,即使该函数在另外一个文件中。这使得查看混乱的C代码变得非常简单。例如,你在查看函数“write_block”,而该函数中调用了“write_line”。但是“write_line”做了什么呢?将光标移动到“write_line”上,并且使用CTRL_J,你就可以跳转到这个函数的定义了。

  函数“write_line”调用了“write_char”。你需要查看这个函数做了什么。你将光标位置放到write_char上,然后按下CTRL_J即可跳转到函数的定义。

  命令“:tags”可以显示使用的tags的列表。

 如果要回去,使用CTRL-T即可跳转到之前的tag。这个命令有一个count参数作为其前缀,可以表明回转的tags数。再一次向前跳转,可以使用:tag到list的最上边。如果要跳转过数个tags,可以使用一个count参数,例如:"3tag"。CTRL-T也可以以一个count为前缀使用。

 

  这些命令允许你使用CTRL-J正向查看调用树,然后使用CTRL-T回退。并且使用":tags"查看你在哪里。

 

 分屏显示

 

     ”:tag“命令将会使用包含新函数的文件,替换当前window显示的文件。但是假设你不仅仅想看原来的函数,也想看到新的函数,应该怎么办?你可以分屏显示,在":tag"命令前,使用":split"命令。Vim有一个简单的命令,可以做到这一点:

 

   :stag  tagname

 

 这样分屏,并且跳转到光标下的tag,可以使用CTRL-W J。

 如果指定一个count,新的window的高度,将会是那样的。

 

更多的TAGS文件

 

  当你在很多目录下有文件,你可以在每个目录下创建一个tags文件。vim将会仅仅能够跳转到这一个目录下的tags,而不能跳转到其他目录下的tags。

 

 让vim查找更多tags文件,使用set tags命令做到。例如:

 

  :settags=./tags,./../tags,./*/tags

 

这将使得vim在上层、本次和所有子层下进行查找。你可以使用完全目录树来进行定义。

 

 

整合成一个TAGS文件

 

  vim在不得不在多个目录下搜索tags文件的时候,将会变得较低效。这种情况下,最好做一次产生一个大的tags文件的操作。

ctags -R .可以对当前目录下,所有目录递归的进行搜索,产生一个tags文件。

 

  一个非常好的事情是,ctags程序能够识别多种文件类型。不仅仅对于C和C++程序,对于Eiffel甚至vim脚本都是。了解更多请参考ctags帮助文档。

  现在你仅仅需要告知vim 你的大的tags文件的目录,就可以了。

 

  多匹配

 

 当一个函数多次被定义的时候(或者一个类中的方法),":tag"将跳转到第一个。如果在当前文件中有匹配,则这个就是第一个。你可以使用如下命令跳转到另外一个匹配tag上:

 

  :tnext

 如果匹配很多,你可以选择一个跳转。

 

   :tselecttagname

 这样,vim将给你显示一个选择的表。

 

 表中的第一列是匹配号。输入这个号,你就可以跳转到这个匹配上。

 

 在匹配tags中进行转换,你可以使用如下命令:

 

  :tfirst  :[count]tprevious :[count]tnext :tlast。count默认是1.

 

猜测TAG名字

 

 使用tab键可以进行tag名字补足。tab将会先产生第一个匹配,继续tab即可切换到下一个。你也可以使用模糊匹配。例如,

 

  :tag /block,跳转到有block的tag。

 现在,使用tab,vim将会查找所有包含block的匹配,并使用第一个。

 

 在tag名字前的/告诉vim,跟随的是模式匹配。你可以使用模式匹配的方式使用任何命令。例如选择,

 

  :tselect/^write_ 是告诉vim选择以”write_“开始的tag。^表示以其开头,$表示以其结尾。

 

TAGS的浏览

 

 CTRL-J带你跳转到光标指定tag的定义,你可以将标识符名称作为一个表格的内容。这是个例子。

 

 首先,创建一个标识符列表,这需要ctags。

  ctags--c-types=f -f functions *.c

 

 现在开启vim,并不使用file作为参数。在vim中编辑这个文件,以垂直分屏方式。

 

  vim

  :vsplitfunctions

 

  Windows包含所有函数的列表。当然,还有更多你可以忽略的东西。使用:setlocalts=99可以整理下。在这个Window,定义一个映射:

 

 :nnmoremap0yew:tag "

 

将鼠标移到包含你想跳转的函数的哪行,输入回车。vim将会跳转到另外一个window并且跳转到选择的函数。

 

 相关选项

 

   你可以 设置‘ignorecase’使得tag名字的大小写被忽略。

  tagbsearch选项告知,是否tags文件被排序或者不排序。默认是假定是一个排序的tags文件,这使得匹配更快,但是如果没排序,则没有什么用了。

  taglength则可以告知vim在一个tag中忽略的标识符多少。

 当你使用SNiFF+程序,你可以使用vim提供给sniff的接口。SNiFF+是一个商业程序。

 Cscope是一个免费程序。它不仅仅发现标识符在哪声明,也可以发现在哪被使用。

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐