当前位置:  开发笔记 > 编程语言 > 正文

跳转到vim中的函数定义

如何解决《跳转到vim中的函数定义》经验,为你挑选了9个好方法。

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

我怎样才能在vim中做这样的事情?



1> Paul Tomblin..:

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

此问题中有更多标签技巧和提示.


与C的相似性与CTags支持PHP无关.它支持PHP和Python.查看http://ctags.sourceforge.net/languages.html以查看完整支持.
没有使用Cscope的经验.是什么?
不爱Cscope?
如果能够最好地学习如何操作这些ctags,那就太棒了.
php很像C,"Exuberant ctags"应该可以使用它.不知道它是否有python模式.

2> Scottie T..:

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


`/`几乎总是不精确,因为它会匹配所有的事件.我发现你实际上可以做`:tag `通过ctags跳转到定义.

3> Brent Faust..:

g* 在没有设置ctags的情况下做得不错.

也就是说,类型g,*(或只是*-见下文)搜索光标下的单词(在这种情况下,函数名).然后按n转到下一个(或Shift- n前一个)发生.

它没有直接跳转到定义,因为这个命令只是在光标下搜索单词,但是如果你现在不想处理设置ctags,你至少可以避免重新使用 - 键入要搜索其定义的函数名称.

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

(a)*将跳转到光标下的下一个单词.(无需g在vi中键入'goto'命令).

(b)#以类似的方式前一次发生.

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


`*`和`g*`之间的区别在于搜索中的字边界.`*`执行`\ `搜索(与常规正则表达式中的`\ bkeyword\b`相同),而`g*`搜索没有字边界的`keyword`.

4> 0x90..:

使用gdgD将光标放在程序中的任何变量上.

    gd 将带你到当地的声明.

    gD 将带你到全球宣言.

这里可以找到更多导航选项.

使用cscope交叉引用大型项目​​,如linux内核.



5> Mykola Golub..:

正如保罗·汤姆林所提到的,你必须使用ctags.您还可以考虑使用插件来选择合适的插件或预览光标下的函数定义.如果没有插件,您将会头痛地尝试选择数百个重载'doAction'方法中的一个,因为内置的ctags支持不会考虑上下文 - 只是一个名称.

您也可以使用cscope及其"查找全局符号"功能.但是你的vim必须用+ cscope支持编译,这不是默认的构建选项.

如果您知道该函数是在当前文件中定义的,则可以在正常模式下使用"gD"按键跳转到光标下符号的定义.

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

这是我写的一个选择上下文,同时跳转到标签
http://www.vim.org/scripts/script.php?script_id=2507



6> Judge Maygar..:

另一种常见技术是将函数名称放在第一列中.这允许通过简单搜索找到定义.

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

然后可以/^main在文件内部或:grep -r '^main' *.c目录中找到上述函数.只要代码被正确缩进,标识符在行的开头出现的唯一时间就是函数定义.

当然,如果你现在不使用ctags,你应该为自己感到羞耻!但是,我发现这个编码标准也是一个有用的补充.


我一直想知道为什么有些程序员会这样写他们的签名!

7> Abdo..:

1-安装旺盛的ctags.如果您正在使用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`

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

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

set autochdir 
set tags+=./tags;

(为什么是半冒号:http://vim.wikia.com/wiki/Single_tags_file_for_a_source_tree)

5-转到你想要关注的单词并点击ctrl + ]; 如果你想回去,请使用ctrl+o(来源:https://packoverflow.com/a/53929/226255)



8> David Woleve..:

第二个保罗的回答:是的,ctags(特别是exuberant-ctags(http://ctags.sourceforge.net/))很棒.我还将此添加到我的vimrc中,因此我可以为整个项目使用一个标记文件:

set tags=tags;/



9> cprn..:

实现此目的的现代方法是运行语言服务器 -一个单独的独立应用程序(每种编程语言一个),该应用程序实时分析整个项目并为您的编辑器提供功能(这是一种通用解决方案)。您会得到如下信息:

命名空间感知标签完成

跳到定义

找到对一个对象的所有引用

查找实现接口的所有类型

在整个项目中重命名

悬停文档

格式化,整理和更多...

nvimvim8(或更高版本),你通过安装语言服务器协议插件郎服务器进行通信:

    vim-lsp-client-处理与语言服务器的通信

    deoplete-可选,在您键入时触发标签完成

您可以在Lang Server网站上找到活跃开发的语言服务器及其功能的列表。

语言服务器协议是由Microsoft为Visual Studio Code 创建的,并作为具有许可的MIT许可证(通过与Red Hat和Codenvy协作进行标准化)的开源项目发布。

我建议在选择的编辑器(VIM的DAP插件:vimspector)中结合使用LSP和DAP(调试适配器协议)来获得完整的IDE体验。

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有