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

时间:2013-11-12 16:05:58

标签: vim tags

现在我正在处理一个使用许多类,方法,函数,变量等的文件。是否可以转到所有这些的声明?请注意,其中一些声明属于同一个文件,但其他声明属于其他文件(可能无法打开,您不知道声明的位置,但确实存在)。如果声明是目录中的一级,会发生什么?如果它是一级下降怎么办?

根据我们所讨论的编程语言,这是以不同的方式完成的,或者无论语言如何,查找声明的过程都是相同的吗?

我一直在阅读,似乎解决方案与标签有关。但是,我想知道如何实现这一目标(一步一步),特别是考虑到我们在某些情况下正在讨论其他文件中的定义。

我知道这可以通过IDE完成,但我想知道使用vim可以实现多少不同。

我只有全新安装的Vim。我还没有安装任何插件,但如果有必要,我愿意这样做。也许这可以在没有插件的情况下完成。

提前致谢!

3 个答案:

答案 0 :(得分:24)

设置标签并不是那么困难(与Vim中的大多数事情一样),与IDE相比,它并不是那么自动。

  1. 首先,您需要ctags工具。今天最常见的是 Exuberant Ctags ,可在ctags.sourceforge.net找到。
  2. 接下来,您需要为项目中的所有文件创建标记数据库(文件名tags)。这通常是通过从项目根目录运行ctags -R .来完成的(也可以通过:!ctags ...从Vim内部运行)。丰富的Ctags支持41 languages,您甚至可以通过正则表达式扩展它。
  3. 最后,需要配置Vim来获取标签数据库。使用:set tags=./tags;,它将在文件目录中向上搜索根目录。如果您有某些全局包含目录,则可以添加这些目录。
  4. 这样,您就可以开始使用Vim的标记功能,例如<C-]>:tag
  5. 您需要定期更新标签数据库;有插件(如easytags.vim)可以自动为您完成。

答案 1 :(得分:6)

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

答案 2 :(得分:1)

为此,我使用you complete me (ycm) plugin

Vim的快速,按需输入,模糊搜索代码完成引擎

它与多种语言一起使用,功能非常强大。检查this section,了解如何在系统上安装它。

例如将其与Java Maven项目一起使用,请从包含您的pom.xml文件的文件夹中打开所需的文件,然后插件会扫描您的所有文件和依赖项。

为了方便使用您所请求的功能,我在~/.vimrc中确实具有以下键映射:

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>已通过,映射到let mapleader = ",",在我的情况下,以下命令将起作用:

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