尝试转到vim中类/函数的定义

尝试转到vim中类/函数的定义,vim,tags,definition,Vim,Tags,Definition,我已经安装了vim 7.2和ctags 5.8,并创建了带有“ctags-R/foopath”的标记文件 我有许多方法在几个类中使用相同的名称调用,因此如果我将光标放在函数调用中并执行“:tag”,它将显示列出的第一个标记。如果我多次执行“:tn”,我最终找到了方法 所以我的问题是:有没有办法直接显示包含我正在调用的正确方法的类的路径?:t选择标记名将为您提供匹配标记的列表,您可以输入所需标记的编号 :stselect标记名将首先拆分窗口 您还可以将光标放在单词上,然后输入g]以获得与该单词匹配

我已经安装了vim 7.2和ctags 5.8,并创建了带有“ctags-R/foopath”的标记文件

我有许多方法在几个类中使用相同的名称调用,因此如果我将光标放在函数调用中并执行“:tag”,它将显示列出的第一个标记。如果我多次执行“:tn”,我最终找到了方法


所以我的问题是:有没有办法直接显示包含我正在调用的正确方法的类的路径?

:t选择标记名将为您提供匹配标记的列表,您可以输入所需标记的编号

:stselect标记名
将首先拆分窗口

您还可以将光标放在单词上,然后输入
g]
以获得与该单词匹配的标记列表

]
将拆分窗口并转到与光标下的单词匹配的第一个标记


g]
将拆分窗口并提供匹配列表。

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

因此,要更精确地搜索“mytag”,请尝试:

要获得最多信息,请确保使用

搜索所需数据后,您将看到与前缀为'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
您可以使用调用BrowseTags(“^myTag$”)来运行函数以获得与myTag的精确匹配,或者使用一些正则表达式来获得类似的匹配


虽然我从来没有费心去做过,但编写各种命令并不会太难,因为它可以在不打开缓冲区的情况下自动完成最常见的任务。

谢谢Dave,但我想你可能不理解我的意思,或者我解释得不对。让我们看看:假设我已经标记了几个具有foo()方法的类(class1、class2、class3等)。如果我有以下代码:$class3_object=newclass3();class3_对象->foo();我想直接转到与class3对应的标记,因为它是对象“class3\u object”的类。哈维
" 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