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++代碼。很坑。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM