跳转到vim中的函数定义

我怎样才能跳转到使用vim的函数定义? 例如对于Visual Assist,我可以在一个函数下键入Alt + g ,并打开一个上下文菜单,其中包含定义的文件。

我如何在vim中做这样的事情?

使用ctags。 生成一个标签文件,并使用:tags命令告诉vim它在哪里。 然后你可以使用Ctrl]跳转到函数定义

在这个问题上有更多的标签技巧和提示。

如果所有内容都包含在一个文件中,则有gd命令(如'goto definition'),它会将您带到光标下文件的第一个出现处,这通常是定义。

g *没有设置标签就能做一份体面的工作。

也就是说,键入g *(或者只是* – 见下文)来search光标下的单词(在本例中是函数名)。 然后按n转到下一个(或上一个Shiftn )出现。

它不会直接跳转到定义,因为这个命令只是search光标下的单词,但是如果你现在不想处理ctags的设置,至less可以避免重新定义 – 键入函数名称来search其定义。

– 编辑 – 虽然我一直在使用g *,但最近我发现了这两个快捷方式的快捷方式!

(a) *将跳转到光标下的单词的下一个出现处。 (不需要在vi中inputg,goto命令)。

(b) #以类似的方式去往上一次出现。

N和n仍然可以工作,但是'#'通常在开始反向search时非常有用,例如,在光标下查找variables的声明。

使用gdgD ,将光标放在程序中的任何variables上。

  1. gd会带你去当地的宣言。
  2. gD将带你到全球的声明。

更多的导航选项可以在这里find。

使用cscope来交叉引用诸如linux内核之类的大型项目。

正如Paul Tomblin所说,你必须使用ctags 。 您也可以考虑使用插件来select适当的插件或预览光标下的函数定义。 如果没有插件,你会很头痛,试图select数百个重载的“doAction”方法之一,因为ctags支持不会考虑上下文 – 只是一个名字。

您也可以使用cscope及其“查找全局符号”function。 但是你的vim必须使用+ cscope支持来编译,这不是默认的编译选项。

如果您知道函数是在当前文件中定义的,则可以在普通模式下使用“gD”按键跳转到光标下方符号的定义。

这里是最下载的导航插件
http://www.vim.org/scripts/script.php?script_id=273

这里是我写的select上下文,而跳转到标签
http://www.vim.org/scripts/script.php?script_id=2507

另一种常见的技术是将函数名称放在第一列中。 这使得可以通过简单的searchfind定义。

 int main(int argc, char *argv[]) { ... } 

上面的函数可以在文件中使用/^mainfind,或者在目录中使用:grep -r '^main' *.c 。 只要代码正确缩进,标识符将在行的开头出现的唯一时间就是函数定义。

当然,如果你从这个angular度不使用ctags ,你应该为自己感到羞耻! 不过,我觉得这个编码标准也是一个有用的补充。

1-安装繁盛的ctags。 如果你使用osx,这篇文章展示了一个小技巧: http : //www.runtime-era.com/2012/05/exuberant-ctags-in-osx-107.html

2-如果您只希望在目录中包含文件的ctags,请在您的目录中运行以下命令:

 ctags -R 

这将为您创build一个“标签”文件。

3-如果您正在使用Ruby,并希望为您的gem添加ctags(这对于我开发的RubyMotion和本地gem非常有帮助),请执行以下操作:

 ctags --exclude=.git --exclude='*.log' -R * `bundle show --paths` 

信用: https : //coderwall.com/p/lv1qww (注意,我省略了为emacs而不是vim生成标签的-e选项)

4-将以下行添加到〜/ .vimrc中

 set autochdir set tags+=./tags; 

(为什么分号: http : //vim.wikia.com/wiki/Single_tags_file_for_a_source_tree )

5转到您要遵循的单词,然后按ctrl + ] ; 如果您想返回,请使用ctrl+o (来源: https : //stackoverflow.com/a/53929/226255 )

第二个保罗的回答:是的,ctags(尤其是exuberant-ctags( http://ctags.sourceforge.net/ ))很棒。 我也已经添加到我的vimrc,所以我可以使用一个标签文件的整个项目:

 set tags=tags;/ 

我真的不推荐在Vim中使用标签。 我不得不写一个比所有其他标签插件更高级的自己的标签插件,也让我们花了很多时间才能最终理解和接受标签太有限,误报太多。

相反,我build议使用更智能的工具,这些工具能够真正了解您正在使用的语言,您的项目的结构以及您试图跳到某些内容的上下文。 例如, phpcd对于PHP项目非常有用 。 它使用PHPreflection来深入了解您的代码。 对于不依赖于标签的其他语言,也有其他的select。

安装cscope 。 它非常像ctags但function更强大。 要定义,而不是Ctrl + ] ,请按Ctrl + \ + g 。 当然你可以同时使用。 但是一个大项目(比如Linux内核),cscope就在前方。