利用vim看xen的源代码时,会碰到很多不认识的宏,变量,结构,函数等,vim不能像vs一样可以随便轻易查看定义什么之类。不过借助ctags可以完成类似的功能,很方便的对一些标识符进行查找。当然还有更强大的工具cscope可以完成这一要求。下面简单的介绍下如何用ctags来辅助vim查看xen的源代码。
xen使用asm和c写的,切换到xen的源码根目录下,执行:
$ctags --langmap=c:.c.h --languages=Asm,c -R
过几秒钟后执行完成,会产生一个tags文件,你可以用less查看下tags的内容,格式比较简单,可以参考其他资料。vim打开一个源文件,把鼠标移到调用函数名上,按住‘CTRL’+‘[’就可以跳转到函数的定义处了。或者使用命令完成相同的功能:
:tag 标识符
当有多处匹配标识符时,vim会默认跳转到第一个匹配处。可以使用下列命令进行操作:
- ta[g][!] tagstring
跳转到tagstring定义处,其中!表示在文件更改没保存时进行强制跳转 - tags
查看跳转记录,并用'>'指出当前位置 - [n]ta[g][!]
跳转到相对当前位置的前第n个tag,n默认为1 - [n]po[p][!]
跳转到相对当前位置的后第n个tag,n默认为1 - ts[elect][!] [tagstring]
显示与tagstring的匹配数 - sts[elect][!] [tagstring]
显示与tagstring的匹配数,选中时以子窗口的形式打开 - [n]tn[ext][!]
跳转到相对后n个匹配处 - [n]tp[revious][!]
跳转到相对前n个匹配处 - [n]tr[ewind][!]
跳转到第n个匹配处 - tl[ast][!]
跳转到一个匹配处
注意ctags默认的将.h文件映射成c++文件,如果不加
--langmap=c:.c.h 。将无法对头文件进行查找,也就是说无法用
:tag tagstring命令来对定义在头文件里的宏、函数等进行查找。
如果用
ctags -R 来产生标识符文件,在c文件里对标识符查找时会出现
E431: Format error in tags file "tags"
Before byte 65
比较了一下产生的tags文件发现标识符那一行都是一样的,只是tags文件会多出很多行。为什么会出现错误,不是很清楚。