如何在vi/vim中找到C代码中函数的调用者和被调用者?

Mon*_*lal 9 c linux vi vim

我想知道如何在函数名称上轻松单击(或者可以使用一些简单的快捷方式)并查找其所有被调用者或打开已定义的位置.网络上的大多数网络手册都很难遵循或者不会发生.说我想点击allocuvm并查看它的定义位置?

uint newstk=allocuvm(pgdir, USERTOP-PGSIZE, USERTOP); 
Run Code Online (Sandbox Code Playgroud)

Cir*_*四事件 16

cscope最小的例子

Ingo提到它,这是一个例子.

转到项目的基本目录并运行:

cscope -Rb
Run Code Online (Sandbox Code Playgroud)

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

打开vim并运行:

:cs add cscope.out
:cs find c my_func
Run Code Online (Sandbox Code Playgroud)

c是一个助记符callers.其他cscope提供的查询也是可能的,助记符列在:

help cscope
Run Code Online (Sandbox Code Playgroud)

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

:copen
Run Code Online (Sandbox Code Playgroud)

转到您感兴趣的行并按Enter键跳转到那里.

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

function! Csc()
  cscope find c <cword>
  copen
endfunction
command! Csc call Csc()
Run Code Online (Sandbox Code Playgroud)

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

去做:

一句忠告:我喜欢vim,但设置这种东西对我来说太复杂了.如果项目对您来说足够重要,请尝试让项目在某个"IDE"上运行.如果项目没有跟踪IDE配置文件(这是自动更改污染回购的blob ......),它可能会涉及一些开销,但这对我来说是值得的.对于C/C++,到目前为止我最喜欢的是KDevelop 4.

  • `&lt;Cr&gt;&lt;Cw&gt;` (`ctrl-r ctrl-w`) 将在 vim 中插入光标下的单词。这使得 `cs find c my_func` 更容易使用。 (2认同)

Ing*_*kat 10

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