Vim:如何进入声明(类,方法,函数,变量等)

jhdbpxl9  于 2022-12-04  发布在  其他
关注(0)|答案(3)|浏览(173)

现在我正在处理一个文件,它使用了许多类、方法、函数、变量等。是否可以转到所有这些的声明?请,请注意,其中一些声明位于同一文件中,而其他声明位于其他文件中(可能未打开,并且您不知道声明的位置,但它们确实存在)。如果声明位于目录的上一级,会发生什么情况?如果声明位于目录的下一级,又会发生什么情况?
这是根据我们所讨论的编程语言以不同的方式完成的,还是不管语言如何,查找声明的过程都是相同的?
我一直在阅读,似乎解决方案与标签有关。然而,我想知道如何实现这一点(一步一步),特别是考虑到我们正在谈论,在某些情况下,在其他文件中的定义。
我知道这可以用IDE完成,但我想知道有多大的不同,这可以实现与Vim。
我只有一个新安装的Vim。我还没有安装任何插件,但愿意这样做,如果它是必要的。也许这可以做到没有插件和有插件。
提前感谢!

pieyvz9o

pieyvz9o1#

设置 tags 并不困难,尽管(像Vim中的大多数事情一样)与IDE相比它不是自动的。
1.首先,你需要ctags工具,2022年最常用的是Universal Ctags; 2013年,它被命名为“Exuberant Ctags”,发现于ctags.sourceforge.net
1.接下来,您需要为项目中的所有文件创建一个 *tags数据库 *(文件名为tags)。这通常通过从项目根目录运行ctags -R .来完成(也可以在Vim中通过:!ctags ...运行)。Exuberant Ctags支持41 languages,您甚至可以通过正则表达式扩展它。
1.最后,需要配置Vim来获取 *tags数据库 *。使用:set tags=./tags;,它将在文件的目录中向上搜索到根目录。如果您有特定的全局包含目录,您可以添加这些目录。
1.这样,您就可以开始使用Vim的标签功能,如<C-]>:tag
您需要定期更新 * 标签数据库 *;存在插件(如easytags.vim; 2022警告:未维护,但仍在工作),它可以自动为您完成这些工作。

pw9qyyiw

pw9qyyiw2#

您可以尝试gd,它转到本地声明,对于更强大的“转到定义”,您可能希望尝试Ingo建议的tags

628mspwn

628mspwn3#

我使用了you complete me (ycm) plugin,它是
用于Vim快速、随键入的模糊搜索代码完成引擎
它可以与一堆语言一起工作,功能非常强大。查看本节了解如何在您的系统上安装它。
例如,在Java Maven项目中使用它时,从包含pom.xml文件的文件夹中打开所需的文件,插件将扫描所有文件和依赖项。
我在~/.vimrc中确实有以下键Map,以方便使用您请求的功能:

let g:ycm_key_list_select_completion = ['<C-n>', '<Down>']
let g:ycm_key_list_previous_completion = ['<C-p>', '<Up>']
let g:SuperTabDefaultCompletionType = '<C-n>'
nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR>
nnoremap <leader>ji :YcmCompleter GoToImplementation<CR>
nnoremap <leader>jr :YcmCompleter GoToReferences<CR>

假设您的<leader>Map到,,并且let mapleader = ","与我的示例相同,则可以使用以下命令:

  • ,jd转到定义或声明
  • ,ji转到实施
  • ,jr转到参考
  • Ctrl+n/Ctrl+p在弹出的列表中下移/上移以进行自动补全

相关问题