尝试在Vim中查找类/函数定义

5
我已经安装了Vim 7.2和Ctags 5.8,并使用“ctags -R /foopath”创建了标签文件。
我有许多在几个类中使用相同名称的方法,因此如果我将光标放在调用函数中并执行“:tag”,它会显示列出的标记中的第一个。如果我执行“:tn”几次,最终会找到该方法。
所以我的问题是:是否有任何方法可以直接显示包含正确方法的类的路径?
2个回答

3

:tselect tagname 命令可以给你返回一个匹配标签的列表,然后你可以输入标签的编号。

:stselect tagname 命令会先分割窗口。

你也可以把光标放在一个单词上,然后输入g]来获得与该单词匹配的标签列表。

<CTRL-W>] 命令会分割窗口并跳转到光标下单词匹配的第一个标签。

<CTRL-W>g] 命令会分割窗口并列出所有匹配的标签。


谢谢Dave,但我认为你可能没有理解我,或者我没有解释清楚。让我们看看:假设我已经标记了几个类(class1、class2、class3等),它们都有方法foo()。如果我有这段代码:$class3_object = new class3(); class3_object->foo();我想直接跳转到与"class3"对应的标签,因为它是对象"class3_object"的类。Javi - tirenweb

0

您可以使用taglist()函数将标签中的原始数据读入缓冲区。然后,您可以在缓冲区中搜索其他感兴趣的条件,包括类名和文件目录的部分。

因此,如果要进行更精细的“mytag”搜索,请尝试:

:new | put =taglist(\"^mytag$\")

为了获得最多的信息,请务必使用Exuberant Ctags
搜索所需数据后,您将看到与标记相关联的文件名以'filename':前缀和行文本以'cmd':前缀。
将其置于一个具有一些代码来美化并正确处理缓冲区的函数中:
" List information about matching tags in a buffer
function! BrowseTags(tagStr)
  new [Tag Brower]
  setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap

  put =taglist(a:tagStr)

  " Beautify it a little
  normal 1G
  while search('^{', 'W')
    call setline(".", split(getline("."), "\\(\\(}$\\)\\|\\('\\w\\+':\\)\\)\\@="))
  endw
  normal 1G
endfunc

您可以使用call BrowseTags("^myTag$")来运行函数以精确匹配myTag,或者使用一些正则表达式来获取类似的匹配。

虽然我从未费心去做过这件事,但编写各种命令以自动化您最常见的任务而不打开缓冲区并不太困难。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接