在不使用外部命令的情况下浏览代码项目


9

我试图在命令或搜索模式下收集Vim命令/查询工具箱,以在使用Ctags或其他外部工具的情况下导航代码库。Ctags很棒,但是支持会因您所坚持的开发环境而异。我只想依靠Vim的知识。


4
也许您应该说“外部工具”而不是“ ctags”,因为我的第一个建议是cscope。
muru 2015年

1
我使用的一件事是命令gd。这会将游标带到游标下变量的本地声明。
nitishch 2015年

@muru我不想使用任何外部工具。我正在尝试学习的是仅使用Vim命令即可有效导航代码库的技术。我知道可以做到,但是显然需要比我更深入的Vim知识。既然SE这么开放,可能不是一个很好的SE问题,但我不知道还有什么地方。
user1332148

Answers:


11

“包含搜索”就是这样一种工具:

[I and ]I      " search current buffer and included files for
               " the word under the cursor, skipping comments
:ilist foo     " same as above but for 'foo'
:ilist /foo    " same as above but for a word containing 'foo'

与“包含搜索”相关的“定义搜索”也很有趣:

[D and ]D      " search current buffer and included files for
               " the definition of the symbol under the cursor
:dlist foo     " same as above but for definition of 'foo'
:dlist /foo    " same as above but for a definition containing 'foo'

:dlist /       " list all definitions from the current buffer
               " and included files

两种工具都取决于文件类型插件可能会或可能不会设置的各种选项。

请参阅:help include-search


您也可以使用gdgD作为轻量级版本[D]D

请参阅:help gd


在当前缓冲区中,以下命令将列出每个函数定义及其行号:

:g/func/#

请参阅:help :g


:grep并且:vimgrep也很有用,如果仅是因为将其结果输入到可以用:cn:cp… 导航并显示在非常方便的quickfix窗口中的quickfix列表中。

:help :grep:help :vimgrep:help quickfix


说到quickfix列表/窗口,我写了这个功能(基于别人的工作)来显示结果[I]I:ilist[D]D:dlist在quickfix列表/窗口。YMMV当然。


虽然不是严格意义上的导航工具,但我发现预览窗口对于查看正在使用的功能的签名非常有用。

请参阅:help preview-window


那说...

除了一些可能适合或可能不适合您的编码风格的正则表达式模式之外,Vim对您的代码一无所知。这意味着借助外部工具(如ctags,cscope或GNU GLOBAL)可以更好地完成代码导航。


5

有很多方法可以浏览代码(包括在Vim和外部代码中),我仍然发现它们。我在日常工作中使用的是:

  • 在项目文件中显示文本,然后通过quickfix窗口进行导航(我使用Silver Searcher进行搜索)。
  • 使用与语言相关的插件,我知道有一些针对javascript,ruby,go的插件可以在程序的模块之间跳转(在javascript插件中为gf-command
  • Ctrl+OCtrl+I-在导航的“历史记录”中向后或向前跳转
  • g; -跳至文件中最后编辑的位置
  • 使用标记在特定位置放置“书签”。您可以使用'[some_letter]命令放置标记,如果字母是大写字母,那么您将获得可以从任何文件(缓冲区)访问的标记。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.