ctags简明使用方法

来源:互联网 发布:汽车电路图查询软件 编辑:程序博客网 时间:2024/04/30 10:56

ctags(Generate tag files for source code)是vim下方便代码阅读的工具,它可以在命令行下帮助程序员很容易地浏览源代码。ctags 最先是用来生成C代码的tags文件,后来扩展成可以生成各类语言的tags, 有些语言也有专有的tags生成工具(比如java的jtags, python的 ptags).

经验老道的牛人,只需稍稍改动几行代码就能解决问题,这都是源于对架构的理解,对代码框架的熟悉,精确的找到问题点。不像现在很多开发人员都是在IDE下尝试性的修改这个、修改那个,压根不知道所以然,就是改了再试试看的心态,期望找到问题。当然话又说回来,现在IT行业的开发工作量,代码量也越来越多,为了追求项目的速度和进度,在代码切分和模块化上的工作往往很少,而人员流动也比以前多了很多,这就存在非常多的设计开发上的技术债务。

这种浮躁的技术研发氛围是每个技术人员所不希望看到的,但是整个业态的竞争和社会的现象,也不是技术人员能够改善的。因此,这里整理一些ctags的东西,希望大家从中看到简洁美,将更多的简洁带到设计中去。

安装ctags


Ubuntu系统(Debian)


首先,查看系统中是否安装了vim和ctags

注:如果vim没有安装,请使用apt-get install vim安装。

# aptitude search ctagsv   ctags                           -v   ctags:i386                      -p   exuberant-ctags                 - build tag file indexes of source code defip   exuberant-ctags:i386            - build tag file indexes of source code defip   libparse-exuberantctags-perl    - exuberant ctags parser for Perlp   libparse-exuberantctags-perl:i3 - exuberant ctags parser for Perl

如果没有安装如上所示,使用apt命令安装ctags

# apt-get install ctagsReading package lists... DoneBuilding dependency treeReading state information... DoneNote, selecting 'exuberant-ctags' instead of 'ctags'The following packages were automatically installed and are no longer required:  libasan0-armhf-cross libatomic1-armhf-cross libc6-armel-armhf-cross  libc6-armhf-cross libc6-dev-armel-armhf-cross libc6-dev-armhf-cross  libgcc-4.8-dev-armhf-cross libgcc1-armhf-cross libgomp1-armhf-cross  libsfasan0-armhf-cross libsfatomic1-armhf-cross libsfgcc-4.8-dev-armhf-cross  libsfgcc1-armhf-cross libsfgomp1-armhf-cross linux-libc-dev-armhf-crossUse 'apt-get autoremove' to remove them.The following NEW packages will be installed:  exuberant-ctags0 upgraded, 1 newly installed, 0 to remove and 8 not upgraded.Need to get 120 kB of archives.After this operation, 334 kB of additional disk space will be used.Get:1 http://mirror.bjtu.edu.cn/ubuntu/ trusty-security/main exuberant-ctags amd64 1:5.9~svn20110310-7ubuntu0.1 [120 kB]Fetched 120 kB in 0s (224 kB/s)Selecting previously unselected package exuberant-ctags.(Reading database ... 112408 files and directories currently installed.)Preparing to unpack .../exuberant-ctags_1%3a5.9~svn20110310-7ubuntu0.1_amd64.deb ...Unpacking exuberant-ctags (1:5.9~svn20110310-7ubuntu0.1) ...Processing triggers for man-db (2.6.7.1-1ubuntu1) ...Setting up exuberant-ctags (1:5.9~svn20110310-7ubuntu0.1) ...update-alternatives: using /usr/bin/ctags-exuberant to provide /usr/bin/ctags (ctags) in auto modeupdate-alternatives: using /usr/bin/ctags-exuberant to provide /usr/bin/etags (etags) in auto mode

非Debian系统


首先,下载ctags源代码

然后,编译

# ./configure# make

最后,安装

# sudo make install

配置vim&ctags

配置vim

"--常用设置--

set ignorecase " 搜索模式里忽略大小写
set smartcase " 如果搜索模式包含大写字符,不使用 'ignorecase' 选项。只有在输入搜索模式并且打开 'ignorecase' 选项时才会使用。
set autowrite " 自动把内容写回文件: 如果文件被修改过,在每个 :next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令时进行;用 :buffer、CTRL-O、CTRL-I、'{A-Z0-9} 或 `{A-Z0-9} 命令转到别的文件时亦然。
set autoindent " 设置自动对齐(缩进):即每行的缩进值与上一行相等;使用 noautoindent 取消设置
set smartindent " 智能对齐方式
set tabstop=4 " 设置制表符(tab键)的宽度
set softtabstop=4 " 设置软制表符的宽度
set shiftwidth=4 " (自动) 缩进使用的4个空格
set cindent " 使用 C/C++ 语言的自动缩进方式
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s "设置C/C++语言的具体缩进方式
set backspace=2 " 设置退格键可用
set showmatch " 设置匹配模式,显示匹配的括号
set linebreak " 整词换行
set whichwrap=b,s,<,>,[,] " 光标从行首和行末时可以跳到另一行去
set hidden " Hide buffers when they are abandoned
set mouse=a " Enable mouse usage (all modes) "使用鼠标
set number " Enable line number "显示行号
set previewwindow " 标识预览窗口
set history=50 " set command history to 50 "历史记录50条


"--状态行设置--
set laststatus=2 " 总显示最后一个窗口的状态行;设为1则窗口数多于一个的时候显示最后一个窗口的状态行;0不显示最后一个窗口的状态行
set ruler " 标尺,用于显示光标位置的行号和列号,逗号分隔。每个窗口都有自己的标尺。如果窗口有状态行,标尺在那里显示。否则,它显示在屏幕的最后一行上。

"--命令行设置--
set showcmd " 命令行显示输入的命令
set showmode " 命令行显示vim当前模式

"--搜索设置--
set incsearch " 输入字符串就显示匹配点
set hlsearch " 高亮度搜寻

配置ctags

" 按下F5重新生成tag文件,并更新taglist
map <F5> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
imap <F5> <ESC>:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
set tags=tags
set tags+=./tags " 表示在当前工作目录下搜索tags文件
set tags+=~/arm/linux-2.6.24.7/tags "表示在搜寻tags文件的时候,也要搜寻~/arm/linux-2.6.24.7/文件夹下的tags文件,在ctags -R 生成tags文件后,不要将tags移动到别的目录,否则ctrl+]时,会提示找不到源码文件)


修改配置

通常配置文件是/etc/vim/vimrc,由于vimrc.local配置的存在,尽量使用local配置文件。


使用sudo vi /etc/vim/vimrc.local编辑vim的配置文档

map <F5> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>imap <F5> <ESC>:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>set numberset rulerset tabstop=4

ctags生成索引文件

以glibc作为查看的代码目录,“-R”表示递归创建,也就包括源代码根目录(当前目录)下的所有子目录。“*”表示所有文件。这条命令会在当前目录下产生一个“tags”文件,当用户在当前目录中运行vi时,会自动载入此tags文件。Tags文件中包括这些对象的列表:用#define定义的宏枚举型变量的值函数的定义、原型和声明名字空间(namespace)类型定义(typedefs)变量(包括定义和声明)类(class)、结构(struct)、枚举类型(enum)和联合(union)类、结构和联合中成员变量或函数VIM用这个“tags”文件来定位上面这些做了标记的对象。

# cd glibcglibc# ctags -R *# ls -lh tags-rw-rw-r-- 1 daniel daniel 8.7M Apr 19 16:57 tags


ctags基本命令

1.$ctags –R * ($为Linux系统Shell提示符,这个命令上面已经有所介绍)
2. $ vi –t tag (请把tag替换为您欲查找的变量或函数名)
3.:ts(ts助记字:tagslist, “:”开头的命令为VI中命令行模式命令)
4.:tp(tp助记字:tagspreview)---此命令不常用,可以不用记
5.:tn(tn助记字:tagsnext) ---此命令不常用,可以不用记
6.Ctrl+ ]跳到光标所在函数或者结构体的定义处
7.Ctrl+ T返回查找或跳转

原创粉丝点击