我想知道如何轻松点击(或使用一些简单的快捷键)函数名称并查找所有调用方或打开其定义的位置。大多数Web手册都很难理解或不能正常工作。比如,我想点击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
这将向快速修复列表中添加一个调用者列表,您可以使用以下命令打开:
:copen
前往您感兴趣的行,按回车键跳转到该行。
要查找当前光标下函数名称的调用者,请在.vimrc
文件中添加以下内容:
function! Csc()
cscope find c <cword>
copen
endfunction
command! Csc call Csc()
当光标在函数上方时,键入:Csc<enter>
。
TODO:
一句忠告:我喜欢vim,但对于我来说设置这种东西太复杂了。 它也不考虑类,例如C ++中的类。 如果一个项目很重要,请尝试在一些“IDE”上工作。 如果项目没有跟踪IDE配置文件(这些是自动更改的污染库的大块),则可能涉及一些额外的开销,但对我来说这是值得的。 对于C / C ++,我迄今为止最喜欢的是KDevelop 4。
<C-r><C-w>
(ctrl-r ctrl-w
)将插入光标下的单词。这使得cs find c my_func
更容易使用。 - pattivacek:cs find c
是很多字符,我更喜欢使用带有 <cword>
的命令;-) - Ciro Santilli OurBigBook.com:cs find c my_func
后,结果没有自动添加到 quickfix 中。运行 copen
会得到一个空的 quickfix 窗口。你需要在你的 .vimrc
文件中添加 set cscopequickfix=s-,c-,d-,i-,t-,e-
才能让它正常工作。 - Salahuddin:help cscope
。vi / . --- / 是 vi 中的搜索功能,而 . 将重复相同的命令。
如果是大文件,您也可以使用 sed(流编辑器)。 sed grep 可以获取行号
阅读 man 页面