一.概述
首先, vim+cscope+ctags真的很强大,对于一个在Linux下玩了近2年的我来说,我在此感到十分惭愧。我之前极少使用vim,没接触过cscope和ctags,看程序也就用gedit和find。如今学习Linux内核时发现这3个工具非常有用,有了它们,我不用再在find之后的文件列表里苦苦找寻某个函数或者某个变量的定义,而是很轻松地找到想要的东西,最重要的是,对学习Linux内核的信心大增。在此仅以简单的形式记录(不完全,以后用到时再记录)这三个东东是怎么使用的,方便以后查询。
二.笔记
在Linux内核源码根目录下执行两条命令:make cscope和make tags,此时会在源码根目录下生成cscope.out和tags等几个文件。
1. #vim /path/filename
如果filename文件存在则打开它,如果不存在则新建之。
2. 在命令模式下:
:q 退出,:q!强制退出(不报存),:w 保存,:wq 保存并退出
/string + Enter
向前查找字符串string
?string + Enter
向后查找字符串string
n
查找同一个字符串的下一个
N
反方向查找同一个字符串的前一个
i
进入编辑模式
Esc按键
退出编辑模式
v
进入可视模式
在可视模式下,通过上,下,左,右键选中文本后:
y表示复制
p表示粘贴
x表示剪切
d表示删除
3. cscope使用
:cs add cscope.out
加载库文件,为后面利用cscope来查找做准备
:cs help
查看cscope命令的用法,输入后,显示如下
add :添加一个新的数据库 (用法: add file|dir [pre-path] [flags])
find :查询一个模式 (用法: find c|d|e|f|g|i|s|t name)
c:找到调用这个函数的函数
d:找到被这个函数调用的函数
e:找到这个 egrep 模式
f:找到此文件夹
g:找到这个定义
i:找文件 #包括这个文件
s:找到这个 C 符号
t:找到对其的赋值
help :显示此信息 (用法: help)
kill :结束一个连接 (用法: kill #)
reset:重置所有连接 (用法: reset)
show :显示连接 (用法: show)
比如说要找调用test函数的函数,则输入:
:cs find c test
4. catgs使用
在命令模式下:
ctrl + ] :找到光标所在位置的标签的定义
ctrl + t :回到跳转之前的标签处
“找到tag:1/3或更多”其他定义的查看方法:
:tselect 显示列表
然后输入相应的数字后回车再查找
: tag definition
跳转到definition定义处(可以是函数名,变量),即使它在另一个文件中