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

我想知道如何在函数名称上轻松点击(或者使用一些简单的快捷方式),find它的全部被调用者或者打开已经定义的位置。 networking中的大多数networking手册都很难遵循,或者没有发生。 说我想点击allocuvm ,看看它已经定义在哪里?

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

Solutions Collecting From Web of "如何在vi / vim的C代码中find函数的调用者和被调用者?"

为此,Vim集成了cscope工具; 请参阅:help cscope获取更多信息。

cscope最小的例子

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

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

 cscope -Rb 

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

打开vim并运行:

 :cs add cscope.out :cs find c my_func 

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

 help cscope 

这将调用者列表添加到quickfix列表中,您可以使用它打开:

 :copen 

转到感兴趣的线路,然后按回车跳到那里。

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

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

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

去做:

  • 使用单个命令在光标下执行当前函数。 相关: Vim:显示状态行中的函数名称
  • 在输入文件时自动添加最近的数据库(父目录): 如何在vim中自动加载cscope.out
  • 交互式地打开像Eclipse一样的调用图。 相关: 从cscope数据库生成调用树

一个忠告:我喜欢vim,但是对于我来说设置这样的事情太复杂了。 如果一个项目对你来说足够重要,试着让这个项目在一些“IDE”上工作。 如果项目不跟踪IDE配置文件(这是自动更改污染回购的斑点),这可能会涉及一些开销,但这是值得的。 对于C / C ++,我最喜欢的是KDevelop 4。

vi /。 — /是vi中的搜索函数, 将重复相同的命令。

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

阅读手册页