综述
上一篇文章,将Vim配置成为一款强大的编辑工具 粗略的介绍了一下.vimrc的配置,以及使用:ls命令:bn 命令在不同文件之间的转跳操作。但是有个缺点就是无法查看函数之间的逻辑调用关系!这篇文章将介绍ctags的使用方法。可以快速的在逻辑函数之间转跳。
安装ctags
ctags是什么?可以参照维基百科的解释 ctags; 如果你可以获得当前系统的安装软件的权限(通常是root权限),则可以使用sudo apt-get install ctags
直接快速的安装ctags,如果没有权限,或者无法获得root权限,那么这里提供一个可用的方案,使用源码编译生成ctags,然后将其放置在$PATH中就可以使用了。
编译源码安装ctags
ctags 源码连接,下载完成之后解压。
解压完成之后使用./configure
配置编译信息
当configure完成之后会有正确的提示输出,博主这里之前已经配置过了,所以提示is unchanged
configure完成之后,make生成ctags
接着讲ctags拷贝的$PATH目录,这样我们就可以使用ctags了!
如果编译出错,或者不想编译。可以使用博主编译生成的ctags 点击下载ctags,编译环境ubuntu 12.04 gcc version 4.6.3
使用ctags生成tags
通用的ctags使用方法
很多博文中都只是提供了使用ctags直接生成的tags方法。但是博主在使用过程中发现有诸多不便。例如不能很好的过滤某些目录,指定某些目录等。常见使用如下命令
ctags -R --languages=c++,c,java,Make,Sh, --c++-kinds=+px --fields=+aiKSz --extra=+q
--languages=c++,c,java,Make,Sh,
就是制定了本次ctags扫描的语言是什么--c++-kinds=+px
指示ctags扫描一些函数声明
高效的ctags使用方法
这里使用到了ctags的-L参数,可以实现扫描指定目录下的指定文件!
#!/bin/sh
OUT_PATH=${PWD}
SRC_PATH=${PWD}
if [ -d ${OUT_PATH} ];
then
echo "Use current directory \"${OUT_PATH}}\""
else
echo "mkdir \"${OUT_PATH}\""
mkdir ${OUT_PATH}
fi
if [ -d ${SRC_PATH}/frameworks -a -d ${SRC_PATH}/packages -a -d ${SRC_PATH}/hardware -a -d ${SRC_PATH}/system ];
then
echo "Found framework packages hardware and system directory!!"
find -L ${SRC_PATH}/frameworks -name "*.h" -o -name "*.cpp" -o -name "*.cc" -o -name "*.c" -o -name "*.java"|grep -vi '\.git' >${OUT_PATH}/names.file
echo "framework scann finish!"
find -L ${SRC_PATH}/packages -name "*.h" -o -name "*.cpp" -o -name "*.cc" -o -name "*.c" -o -name "*.java"|grep -vi '\.git' >>${OUT_PATH}/names.file
echo "packages scann finish!!"
find -L ${SRC_PATH}/hardware -name "*.h" -o -name "*.cpp" -o -name "*.cc" -o -name "*.c" -o -name "*.java"|grep -vi '\.git' >>${OUT_PATH}/names.file
echo "hardware scann finish!!"
find -L ${SRC_PATH}/system -name "*.h" -o -name "*.cpp" -o -name "*.cc" -o -name "*.c" -o -name "*.java"|grep -vi '\.git' >>${OUT_PATH}/names.file
echo "sytstem scann finish!!"
else
echo "Please run this script under the root of your project!!!"
fi
echo "For create ctags databases.."
ctags -L ${OUT_PATH}/names.file -f ${OUT_PATH}/tags
echo "DONE!!"
注意事项
生成tags之后,会在当前目录(例如/a/b/c)有一个tags的文件生成,那么我们在使用vim打开文件的时候,需要首先进入到当前目录(/a/b/c)这样就可以了
不同文件之间的转跳
这里先介绍两个最常用的,后面更高级的稍后再介绍,这里所有的转跳操作需要将编标移动到对应位置
Ctrl +]
转跳到调用的当前函数的实现部分Ctrl +t
跳转回上一步