11

我想知道如何轻松单击(或者使用一些简单的快捷方式)函数名称并找到它的所有被调用者或打开它已定义的位置。网络中的大多数网络手册都很难遵循或碰巧无法解决。假设我想单击allocuvm并查看它的定义位置?

uint newstk=allocuvm(pgdir, USERTOP-PGSIZE, USERTOP); 
4

3 回答 3

22

cscope 最小示例

Ingo提到了它,这里是一个例子。

首先你应该设置你的.vimrc

set cscopequickfix=s-,c-,d-,i-,t-,e-

然后到项目的基目录并运行:

cscope -Rb

这会生成一个cscope.out包含解析信息的文件。生成速度相当快,即使对于像 Linux 内核这样的大型项目也是如此。

打开 vim 并运行:

:cs add cscope.out
:cs find c my_func

c是 的助记符callers。其他cscope提供的查询也是可能的,助记符列在下面:

help cscope

这会将调用者列表添加到 quickfix 列表中,您可以使用以下命令打开该列表:

:copen

转到您感兴趣的行,然后按 Enter 跳到那里。

要查找当前光标下函数名称的调用者,请添加到您的.vimrc

function! Csc()
  cscope find c <cword>
  copen
endfunction
command! Csc call Csc()

:Csc<enter>在光标位于函数顶部时输入。

去做:

一个忠告:我喜欢 vim,但是设置这种东西对我来说太复杂了。并且它不考虑类,例如 C++ 中的类。如果一个项目对您来说足够重要,请尝试让该项目在某个“IDE”上运行。如果项目不跟踪 IDE 配置文件(它们是污染存储库的自动更改 blob ......),它可能会涉及一些开销,但这对我来说是值得的。对于 C/C++,到目前为止我最喜欢的是 KDevelop 4。

于 2015-07-19T12:53:12.317 回答
11

为此,Vim 与cscope工具集成;有关更多信息,请参阅:help cscope

于 2013-10-19T19:22:21.310 回答
-1

六 / 。--- / 是 vi 中的搜索函数,而 . 将重复相同的命令。

如果它是一个大文件,你也可以使用 sed (流编辑器) sed grep 可以获得行号

阅读手册页

于 2016-05-23T18:24:50.190 回答