Ubuntu|安装配置和使用 ctags

Posted by Elli0t on 2020-08-10

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

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

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

ctags可以用于在vim中的函数定义跳转。在ubuntu16.04下默认提供的ctags是很老很旧的ctags,快要发霉的版本(5.9~svn20110310-11),快扔掉它,安装universal-ctags吧!

发霉的exuberant-ctags

1
2
3
4
aptcache search ctags
其中只有exuberant-ctags是apt可安装ctags版本的正确名字
看到其中版本号是5.9~svn20110310,已经9年没有更新了。这样的包,发霉7年了,扔了吧:
apt --purgeautoremove exuberant-ctags

安装新鲜的universal-ctags

universal-ctags是什么?A maintained ctags implementation, https://ctags.io,一个负责的ctags实现,在github上开源并且持续更新和维护。

不多说,快点安装吧:

1
2
3
4
5
6
7
8
sudo apt install autoconf
cd /tmp
git clone https://github.com/universal-ctags/ctags
cd ctags
./autogen.sh
./configure --prefix=/opt/software/universal-ctags # 我的安装路径。你按自己的情况调整。
make -j8
sudo make install

把ctags可执行文件更新到系统PATH上?No,我选择创建链接的方式:

1
2
3
4
5
# 如果你装了emacs-snapshot,那么现在的ctags命令实际上链接到了/usr/bin/ctags-snapshot,要先删除链接文件:
# sudo rm /usr/bin/ctags

# 然后,把新编译安装的universal-ctags链接过来:
sudo ln -s /opt/software/universal-ctags/bin/ctags /usr/bin/ctags

在vim中配置ctags

关键配置是:

1
2
set tags=tags;
set autochdir

放在vim配置文件中。

可以直接用我的vim配置:

1
2
3
4
5
6
7
cd /tmp

git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime
sh ~/.vim_runtime/install_awesome_vimrc.sh

git clone https://github.com/zchrissirhcz/dotfiles
./install.sh

使用ctags

1
2
cd ~/work/opencv   # 随便进入到一个你的c++工程目录
ctags -R . #递归地生成.tags文件

然后在vim中用Ctrl+](跳转到函数定义)和Ctrl+t(跳出定义)。注意,可以多层级嵌套使用,所以这两个操作相当于入栈和弹栈。

参考链接

https://blog.csdn.net/lida2003/article/details/6959975?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare

https://www.cnblogs.com/zjutzz/p/9393397.html