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

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


当前回答

G *在没有设置标签的情况下做得不错。

也就是说,输入g,*(或者只输入* -请参见下文)来搜索光标下的单词(在本例中是函数名)。然后按n转到下一个(或Shift-n为前一个)事件。

它不会直接跳转到定义,因为这个命令只是在光标下搜索单词,但是如果您现在不想处理设置ctags的问题,那么至少可以避免重新键入函数名来搜索它的定义。

——编辑 虽然我已经使用g*很长时间了,但我最近发现了这些快捷键的两个快捷键!

(a) *将跳转到光标下出现单词的下一个位置。(不需要输入g,在vi中输入'goto'命令)。

(b) #以类似的方式指向前一个事件。

N和N仍然可以工作,但是'#'通常非常有用,可以从相反的方向开始搜索,例如,在游标下查找变量的声明。

其他回答

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

使用ctags。生成一个标记文件,并使用:tags命令告诉vim它的位置。然后使用Ctrl-]跳转到函数定义

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

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

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

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

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

G *在没有设置标签的情况下做得不错。

也就是说,输入g,*(或者只输入* -请参见下文)来搜索光标下的单词(在本例中是函数名)。然后按n转到下一个(或Shift-n为前一个)事件。

它不会直接跳转到定义,因为这个命令只是在光标下搜索单词,但是如果您现在不想处理设置ctags的问题,那么至少可以避免重新键入函数名来搜索它的定义。

——编辑 虽然我已经使用g*很长时间了,但我最近发现了这些快捷键的两个快捷键!

(a) *将跳转到光标下出现单词的下一个位置。(不需要输入g,在vi中输入'goto'命令)。

(b) #以类似的方式指向前一个事件。

N和N仍然可以工作,但是'#'通常非常有用,可以从相反的方向开始搜索,例如,在游标下查找变量的声明。

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

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

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

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