如何使用Vim跳转到函数定义?例如,在Visual Assist中,我可以在函数下输入Alt+g,它会打开一个上下文菜单,列出带有定义的文件。

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


当前回答

另一种常用的技术是将函数名放在第一列中。这样就可以通过简单的搜索找到定义。

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

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

当然,如果你从此不再使用标签,你应该为自己感到羞耻!然而,我发现这个编码标准也是一个有用的补充。

其他回答

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

安装cscope。它的工作原理很像ctags,但更强大。要转到definition,请执行Ctrl + \ + g,而不是Ctrl +]。当然,您可以同时使用两者。但是对于一个大项目(比如Linux内核),cscope遥遥领先。

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

2-如果你只想在你的目录中包含文件的ctags,在你的目录中运行这个命令:

ctags -R

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

3-如果你正在使用Ruby,并且希望为你的宝石包含ctags(这对我使用RubyMotion和我开发的本地宝石非常有帮助),请执行以下操作:

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)

将光标放在程序中的任何变量上时使用gd或gd。

动力局会带你去当地报关。 gD将带您到全局声明。

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

使用cscope交叉引用大型项目,例如linux内核。

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

set tags=tags;/