将Vim配置成为一款强大的编辑工具之 ctags的安装和使用

  • 综述
  • 安装ctags
    • 编译源码安装ctags
  • 使用ctags生成tags
    • 通用的ctags使用方法
    • 高效的ctags使用方法
    • 注意事项
  • 不同文件之间的转跳
  • 参考

综述

上一篇文章,将Vim配置成为一款强大的编辑工具 粗略的介绍了一下.vimrc的配置,以及使用:ls命令:bn 命令在不同文件之间的转跳操作。但是有个缺点就是无法查看函数之间的逻辑调用关系!这篇文章将介绍ctags的使用方法。可以快速的在逻辑函数之间转跳。

安装ctags

ctags是什么?可以参照维基百科的解释 ctags; 如果你可以获得当前系统的安装软件的权限(通常是root权限),则可以使用sudo apt-get install ctags直接快速的安装ctags,如果没有权限,或者无法获得root权限,那么这里提供一个可用的方案,使用源码编译生成ctags,然后将其放置在$PATH中就可以使用了。

编译源码安装ctags

ctags 源码连接,下载完成之后解压。
解压完成之后使用./configure 配置编译信息
./configure
当configure完成之后会有正确的提示输出,博主这里之前已经配置过了,所以提示is unchanged
configure
configure完成之后,make生成ctags
make
接着讲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 跳转回上一步

参考

ctags的使用及相关参数介绍
ctags用法

你可能感兴趣的:(vim)