2010.11.22 10:20更新: 今天才发现我当初是没有弄清楚Vim寻找tags文件的方式, 现在看来, 只需要在源码根目录执行"ctags -R
", 然后每次都使用这一个tags文件即可. 因此下面的做法相当于画蛇添足, 现仅留作存档.
2010.11.22凌晨更新: 下面的脚本中由于find
用到了扩展的POSIX正则表达式, 因此请注意检查你系统中的find
是否支持, 比如BSD系统自带的find
就只支持标准的正则表达式.
昨天本来想看下xlockmore的源码的, 开始以为Vim + Tag List就差不多了, 后来发现不行的, 源码里面包含了一些include
文件中的类型定义啊, 函数定义啊这些的, 想去看下原型都不行.
ctags
, 在我正在查看的源文件的目录下生成了一个tags文件. 这下好了, 可以跳转查看了, 不过马上新的麻烦又来了. 我还想在这个新跳转的文件中继续跳转, 但由于它同刚才的不在同一个目录, 所以Vim找不到相应的tags文件. 真是麻烦, 看来必须在每一个目录下都生成一个tags文件才行, 不过我很懒, 不想手动进入每一个目录, 然后重复执行那行命令. 查了一会儿ctags
的man page, 没找到想要的功能, 又Google了一下, 还是没找到, 倒是找到了和我遇到相同麻烦的人, 呵呵~ 问了下joy, 貌似他也不是很清楚, 于是我就干脆写个脚本算了. 把这个脚本放在包含所有源码的根目录执行就行了.
#!/bin/bash if which ctags > /dev/null; then echo "Hey, I get it!" > /dev/null else echo "ctags is needed" exit 1 fi base_dir=`pwd` extension="\([cC]\|[cC][pP][pP]\|[hH]\)" cd "$base_dir" for dir in `find . -type d`; do cd "$dir" file=`find . -maxdepth 1 -regex ".*\.${extension}" -execdir echo 'found' \; -quit` if [ -n "$file" ]; then echo "$dir" ctags -R "$base_dir" fi cd "$base_dir" done exit 0顺便记下在Vim中通过tags文件跳转的命令:
g^] 跳转
^T 跳回
然后还有个cscope
, 可以用来搜索源码, 还没怎么用过.
P.S. xlockmore的源码看着真是费劲, n多的宏定义和typedef
, 害得我头都看晕了...
No comments:
Post a Comment