打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ctags简明使用方法

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安装。

  1. # aptitude search ctags  
  2. v   ctags                           -  
  3. v   ctags:i386                      -  
  4. p   exuberant-ctags                 - build tag file indexes of source code defi  
  5. p   exuberant-ctags:i386            - build tag file indexes of source code defi  
  6. p   libparse-exuberantctags-perl    - exuberant ctags parser for Perl  
  7. p   libparse-exuberantctags-perl:i3 - exuberant ctags parser for Perl  

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

  1. # apt-get install ctags  
  2. Reading package lists... Done  
  3. Building dependency tree  
  4. Reading state information... Done  
  5. Note, selecting 'exuberant-ctags' instead of 'ctags'  
  6. The following packages were automatically installed and are no longer required:  
  7.   libasan0-armhf-cross libatomic1-armhf-cross libc6-armel-armhf-cross  
  8.   libc6-armhf-cross libc6-dev-armel-armhf-cross libc6-dev-armhf-cross  
  9.   libgcc-4.8-dev-armhf-cross libgcc1-armhf-cross libgomp1-armhf-cross  
  10.   libsfasan0-armhf-cross libsfatomic1-armhf-cross libsfgcc-4.8-dev-armhf-cross  
  11.   libsfgcc1-armhf-cross libsfgomp1-armhf-cross linux-libc-dev-armhf-cross  
  12. Use 'apt-get autoremove' to remove them.  
  13. The following NEW packages will be installed:  
  14.   exuberant-ctags  
  15. 0 upgraded, 1 newly installed, 0 to remove and 8 not upgraded.  
  16. Need to get 120 kB of archives.  
  17. After this operation, 334 kB of additional disk space will be used.  
  18. Get:1 http://mirror.bjtu.edu.cn/ubuntu/ trusty-security/main exuberant-ctags amd64 1:5.9~svn20110310-7ubuntu0.1 [120 kB]  
  19. Fetched 120 kB in 0s (224 kB/s)  
  20. Selecting previously unselected package exuberant-ctags.  
  21. (Reading database ... 112408 files and directories currently installed.)  
  22. Preparing to unpack .../exuberant-ctags_1%3a5.9~svn20110310-7ubuntu0.1_amd64.deb ...  
  23. Unpacking exuberant-ctags (1:5.9~svn20110310-7ubuntu0.1) ...  
  24. Processing triggers for man-db (2.6.7.1-1ubuntu1) ...  
  25. Setting up exuberant-ctags (1:5.9~svn20110310-7ubuntu0.1) ...  
  26. update-alternatives: using /usr/bin/ctags-exuberant to provide /usr/bin/ctags (ctags) in auto mode  
  27. update-alternatives: using /usr/bin/ctags-exuberant to provide /usr/bin/etags (etags) in auto mode  

非Debian系统


首先,下载ctags源代码

然后,编译

  1. # ./configure  
  2. # make  

最后,安装

  1. # 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的配置文档

  1. map <F5> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>  
  2. imap <F5> <ESC>:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>  
  3. set number  
  4. set ruler  
  5. set tabstop=4  

ctags生成索引文件

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

  1. # cd glibc  
  2. glibc# ctags -R *  
  3. # ls -lh tags  
  4. -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返回查找或跳转

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ubuntu12.04下cskope vim ctags
安装Exuberant Ctags及Tag List插件
Ubuntu安装Vim插件taglist
Ctags with Vim
vim ctags cscope 打造Android源码阅读工具
vim插件使用简介
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服