Ubuntu16.04安装配置和使用ctags
Ubuntu16.04安装配置和使用ctags
by ChrisZZ
ctags可以用于在vim中的函数定义跳转。在ubuntu16.04下默认提供的ctags是很老很旧的ctags,快要发霉的版本(5.9~svn20110310-11),快扔掉它,安装universal-ctags吧!
发霉的exuberant-ctags
来,一起看看,默认的ctags是什么情况。
查看apt提供了哪些ctags包
aptitude search ctags
查询结果:
v ctags -
v ctags:i386 -
i exuberant-ctags - build tag file indexes of source code definitions
p exuberant-ctags:i386 - build tag file indexes of source code definitions
p geany-plugin-ctags - ctags plugin for Geany
p geany-plugin-ctags:i386 - ctags plugin for Geany
p libparse-exuberantctags-perl - exuberant ctags parser for Perl
p libparse-exuberantctags-perl:i386 - exuberant ctags parser for Perl
其中只有exuberant-ctags是apt可安装ctags版本的正确名字。
查看exuberant-ctags版本信息
dpkg -l exuberant-ctags
查询结果:
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-==============================================================-====================================-====================================-==================================================================================================================================
ii exuberant-ctags 1:5.9~svn20110310-11 amd64 build tag file indexes of source code definitions
看到其中版本号是5.9~svn20110310-11,已经7年没有更新了。这样的包,发霉7年了,扔了吧:
sudo apt remove exuberant-ctags -y
安装新鲜的universal-ctags
universal-ctags是什么?A maintained ctags implementation, https://ctags.io,一个负责的ctags实现,在github上开源并且持续更新和维护。
不多说,快点安装吧:
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,我选择创建链接的方式:
# 如果你装了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
关键配置是:
set tags=tags;
set autochdir
放在vim配置文件中。
可以直接用我的vim配置:
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
cp dotfiles/my_configs.vim ~/.vim_runtime/
使用ctags
cd ~/work/opencv # 随便进入到一个你的c++工程目录
ctags -R . #递归地生成.tags文件
然后在vim中用Ctrl+](跳转到函数定义)和Ctrl+t(跳出定义)。注意,可以多层级嵌套使用,所以这两个操作相当于入栈和弹栈。
enjoy!
===
update@2019-01-14 11:00:25
在tensorflow源码中使用ctags,发现很多C++结构体或函数跳转有问题,没法跳转到定义。这种情况是因为tensorflow很多代码不是C/C++写的,而是protobuf,调用protoc编译器后才生成相应的C/C++代码。很坑。
Ubuntu16.04安装配置和使用ctags的更多相关文章
- Ubuntu16.04安装配置Caffe教程(GPU版)
推荐博客:https://www.linuxidc.com/Linux/2017-11/148629.htmhttps://blog.csdn.net/yggaoeecs/article/detail ...
- Ubuntu16.04 安装配置Caffe
Caffe已经是第三次安装配置了,为什么是第三次呢?因为我实在是低估了深度学习对于硬件的要求.第一次我在自己笔记本上配置的单核,CPU only ... 结果是,样例数据跑了4小时,这还怎么玩?第二 ...
- Ubuntu16.04安装配置sublime text3
1.安装Sublime Text 3 首先添加sublime text 3的仓库: sudo add-apt-repository ppa:webupd8team/sublime-text-3 根据提 ...
- ubuntu16.04 安装配置matlab+python +cuda8.0+cudnn+opencv3.1的caffe环境
网络上有很多ubuntu上caffe配置环境的帖子,本人照着其中的许多进行了参考,都出现了或多或少的错误,很多地方也有差异. 于是自己整理了下自己的安装过程,成功进行了测试,跑通了faster-rcn ...
- Ubuntu16.04安装配置Eclipse 以及opencv的使用
安装配置http://www.oracle.com下载与自己电脑系统对应的JDK.我下载的是jdk-8u101-linux64.tar.gz 解压:sudo tar -zxvf jdk-8u101-l ...
- ubuntu16.04安装配置nagios
参考博文:https://www.howtoing.com/ubuntu-nagios/ 该博文真实有效可供参考,按照步骤,基本可以成功 一.安装的先决条件 sudo apt-get install ...
- ubuntu16.04安装配置mysql数据库,分割视频为帧图像
参考http://wiki.ubuntu.org.cn/MySQL%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97 版本为5.7 一.安装 安装命令sudo apt-get i ...
- Ubuntu16.04安装Redis并配置
Ubuntu16.04安装Redis并配置 2018年05月22日 10:40:35 Hello_刘 阅读数:29146 Ubuntu16.04安装Redis并配置 1):安装: 1:终端命令下载 ...
- Ubuntu16.04安装后开发环境配置和常用软件安装
Ubuntu16.04安装后1.安装常用软件搜狗输入法+编辑器Atom+浏览器Chome+视频播放器vlc+图像编辑器GIMP Image Editor安装+视频录制软件RcordMyDesktop安 ...
随机推荐
- CF1102F Elongated Matrix
题目地址:CF1102F Elongated Matrix 没想到Div.3里还有这么好的题 其实就是求Hamilton路径 预处理 \(d\) 数组: \(d1_{i,j}\) 表示第 \(i,j\ ...
- 【python网络爬虫】之requests相关模块
python网络爬虫的学习第一步 [python网络爬虫]之0 爬虫与反扒 [python网络爬虫]之一 简单介绍 [python网络爬虫]之二 python uillib库 [python网络爬虫] ...
- 解决python发送multipart/form-data请求上传文件的问题
服务器接收文件时,有时会使用表单接收的方式,这意味着我们需要使用Python的requests上传表单数据和文件. 常用的方式一般如下: data = { 'name': 'nginx' } file ...
- expect学习笔记及实例详解
因为最近正在学习expect脚本,但是发现网上好多文章都是转载的,觉得这篇文章还不错,所以简单修改之后拿过来和大家分享一下~ 1. expect是基于tcl演变而来的,所以很多语法和tcl类似,基本的 ...
- Light Oj 1005
题意: 从 n*n 的棋盘中放置 K 个 行和列不冲突的棋子 思路: 组合数学, 先选 k 个 行, k 个列, 就是 C(n,k) ^ 2; 然后 K 个棋子不相同, K ! 全排列 #includ ...
- nodejs process.memoryUsage() rss等参数啥含义
1 前言 使用process.memoryUsage() ,然后可以得到一个对象如下: { rss: 4935680, heapTotal: 1826816, heapUsed: 650472, ex ...
- 进程、线程、GIL、同步、异步、并行、并发、互斥锁
- Go语言从入门到放弃(一) 变量/常量/函数
HelloWorld 我们先看看一个最简单的HelloWorld代码 package main import "fmt" func main() { fmt.Println(&qu ...
- 密码正确 mysql无法登陆 red7.3 上安装mysql5.6后登录报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passswd :yes)
集群需要mysql存储元数据,就在前几天还运行好好的,突然就进不去了......还是太菜,遇到的bug少. 引起这种故障的原因有很多......第一个坑比较多,大部分用户也就用第一个就可以解决问题,我 ...
- 【进阶2-2期】JavaScript深入之从作用域链理解闭包(转)
这是我在公众号(高级前端进阶)看到的文章,现在做笔记 https://github.com/yygmind/blog/issues/18 红宝书(p178)上对于闭包的定义:闭包是指有权访问另外一 ...