我想知道如何轻松单击(或者使用一些简单的快捷方式)函数名称并找到它的所有被调用者或打开它已定义的位置。网络中的大多数网络手册都很难遵循或碰巧无法解决。假设我想单击allocuvm
并查看它的定义位置?
uint newstk=allocuvm(pgdir, USERTOP-PGSIZE, USERTOP);
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。
为此,Vim 与cscope工具集成;有关更多信息,请参阅:help cscope
。
六 / 。--- / 是 vi 中的搜索函数,而 . 将重复相同的命令。
如果它是一个大文件,你也可以使用 sed (流编辑器) sed grep 可以获得行号
阅读手册页