Vim+ctags可以方便的查阅linux内核源代码。ctags、cscope、 tlist好几个工具可以共用。
先说ctags!其实,它只是用来生成一个tags文件,也就是把源代码中的对象找到、并记录下来,放到tags文件里。其他的工作就交给VIM来完成。
“tags” 文件中包括这些对象的列表:
① 用#define定义的宏
② 枚举型变量的值
③ 函数的定义、原型和声明
④名字空间(namespace)
⑤ 类型定义(typedefs)
⑥变量(包括定义和声明)
⑦ 类(class)、结构(struct)、枚举类型(enum)和联合(union)类、结构和联合中成员变量或函数
如何用VIM+ctags查看源码呢?
首先,要安装ctags。
$ sudo apt-get install ctags
然后,进入到源码目录下:使用ctags -R命令生成tags文件。(参数-R表示,将该目录下所有的文件都包含在内)
/usr/src/linux-2.6.30$ sudo tags -R
也可以使用make tags命令,该命令只是将你选用的体系结构的文件包含到tags文件中。tags -R是将所有的体系结构都包含在内。
/usr/src/linux-2.6.30$ sudo make tags
(耐心等待一段时间,毕竟内核文件很大)
接下来,就可以使用命令查找需要的函数或结构体等!
一些常用的查找方法如下:
1) 用命令行。在运行vim的时候加上"-t"参数,(这里一定要与生成tags文件时在同一目录下才可以)例如:
# vim -t foo_bar
这个命令将打开定义"foo_bar"(变量或函数或其它)的文件,并把光标定位到这一行。
2) 在vim已打开的任意一个文件中,使vim处于命令模式下,使用":tag"命令,例如:
:tag foo_bar
如果要查找的是结构体的定义可以使用ts命令,同样是在命令行模式下,输入:ts XX(要找的结构体)
这时vim会为你展现出许多个,用空格进行翻页,记下你要找的一个对应的数字,一直按空格键,直到提示你输入数字。输入对应的数字,回车就会跳转到你要查找的结构体定义处。
3) 最方便的方法是把光标移到变量名或函数名上,然后按下" Ctrl-]";用"Ctrl-o"退回原来的地方。用 Ctrl-]延着调用树向前跳转, 用Ctrl-t向回跳转(当然啦,这是建立你已经打开文件的基础之上喽!)
4) 分割窗口
":tag"命令会将当前窗口的文件替换为包含新函数的文件。怎样才能同时查看两个文件呢?你可以使用 ":split"命令将窗口分开然后再用":tag"命令。vim 有个缩写命令可以做到这些:
:stag tagname
使用下面的命令可以分割当前窗口并跳转到光标下的标签:
Ctrl-w-]
如果指定了计数参数,新窗口将包含指定的那么多行。
有这些用法基本上就够用了,再多一些基本上就是VIM的灵活运用了。另外,如果这些还不能满足你的要求时,可以使用find和grep来帮忙。假如要找fork.c,就可以用在内核目录下输入:find -name fork.c
/usr/src/linux-2.6.30.5$ find -name fork.c
./kernel/fork.c