1. 程式人生 > >利用ctag+cscope+taglist+Nerdtree打造功能等價於sourceinsight的核心程式碼閱讀神器

利用ctag+cscope+taglist+Nerdtree打造功能等價於sourceinsight的核心程式碼閱讀神器

  • 注:網路上關於利用ctag+cscope+taglist+Nerdtree打造功能等價於sourceinsight的博文數不勝數,本人這篇博文談不上錦上添花,更遑論雪中送炭。把這個打造過程記錄下來,僅僅只是希望能夠為他人提供些許幫助,對我個人而言就已經很開心了。

1. 環境描述

ubuntu16.04 LTS,64作業系統。

2.安裝ctag,cscope

$sudo apt-get install ctag cscope

查詢ctag和cscope有沒有安裝成功,可以嘗試下面的命令

$cscope  --version

$ctag  --version

3.下載taglist和nerdtree

3.1 確切地說taglist和nerdtree不需要安裝,這2個東西其實是vim外掛

taglist下載地址(截止到目前有效):https://vim.sourceforge.io/scripts/script.php?script_id=273

taglist下載來後,是一個taglist.vim檔案

nerdtree下載地址(截止到目前有效):https://www.vim.org/scripts/script.php?script_id=1658

nerdtree下載來後是一個zip檔案,使用命令

$unzip NERD_tree.zip -d yourpath

yourpath是一個由你自己指定的目錄,如果此目錄不存在會自動建立,比較隨意。我自己這樣操作

$unzip NERD_tree.zip -d ./NERD

3.2 開啟NERD目錄可以看到如下目錄與檔案

$ls ./NERD

autoload   doc   LICENCE      plugin      syntax   CHANGELOG   lib   nerdtree_plugin    README.markdown

4. 配置環境--Ctags

到了這一步,ctag+cscope+taglist+Nerdtree已經全部準備好了。

4.1 檢查有沒有.vimrc檔案和.vim目錄

$ls ~/.vimrc

$ls ~/.vim

通常剛剛安裝好ubuntu作業系統後,.vimrc檔案是存在的,.vim目錄是不在的。如果檔案或者目錄有不存在的清形,自己建立。操作命令如下:

$cd ~

$touch .vimrc  #建立檔案

$mkdir .vim  #建立目錄

4.2 把3.2中NRED目錄的所有東西拷貝到.vim目錄下,如果.vim目錄下存在與NERD下同名的目錄,那麼只把同名的目錄中的檔案copy到.vim中的那個目錄去即可

4.3 把3.1下載的taglist.vim放到~/.vim/plugin目錄下面

4.4 ctag生成

在核心原始碼根目錄下執行下面命令(這條命令會花幾分鐘的時間)

$ctags -R --c++-kinds=+px --fields=+iaS --extra=+q

執行完成後,在原始碼根目錄下一定能看到一個檔案tags,執行命令

$file tags

tags: LaTeX document, ASCII text

輸出如上結果。

接下來配置tags的路徑,開啟檔案~/.vimrc

在檔案中新增2行

set tags+=/yourpath/tags            #tags檔案的絕對路徑

let Tlist_Ctags_Cmd = '/usr/bin/ctags'        #ctags命令的路徑

注意:ctags的命令路徑需要自己查詢,查詢命令為

$whereis ctags

執行後會打印出ctags的命令路徑。

5.  配置環境--Cscope

#!/bin/bash
LNX=/home/youself/linux-2.6.39
cd /     
find  $LNX   \
-path "$LNX/arch/*" ! -path "$LNX/arch/x86*" -prune -o \
-path "$LNX/crypto/*" -prune -o \
-path "$LNX/Documentation/*" -prune -o \
-path "$LNX/firmware/*" -prune -o \
-path "$LNX/net/*" -prune -o \
-path "$LNX/samples/*" -prune -o \
-path "$LNX/scripts*" -prune -o  \
-path "$LNX/security/*" -prune -o \
-path "$LNX/sound/*" -prune -o \
-path "$LNX/tools/*" -prune -o \
-path "$LNX/usr/*" -prune -o \
-path "$LNX/virt/*" -prune -o \
-name "*.[chxsS]" -print >/home/youself/cscope_ctag_db/cscope.files

把上面的指令碼儲存到一個youdefinename.sh檔案中,修改youdefinename.sh檔案許可權並執行

$sudo chmod 775 youdefinename.sh

注意:(1)上面指令碼的第二行與最後一行需要適配為自己的路徑,第二行為原始碼路徑,最後一行是存放cscope資料庫的目錄。(2)上面指令碼是針對2.6.39原始碼寫的,如果你是其他的版本的核心原始碼,請適配

$./youdefinename.sh

$ls /home/youself/cscope_ctag_db

可以看到cscope.files。驗證檔案cscope.files是成功了的,執行命令

$cat cscope.files | head -n 50

看到有東西輸出,都是核心原始碼檔案的絕對路徑。

在包含cscope.files路徑下執行

$cd /home/youself/cscope_ctag_db

$cscope -b -q -k

會生成好幾個檔案,其中包括cscope.out。還差最後一步了,執行

$cd ~/.vim/plugin

$sudo gedit cscope_maps.vim

在該檔案中找到如下幾行,並修改成你自己的cscope.out的路徑

  41     if filereadable("/home/youself/cscope_ctag_db/cscope.out")
 42         cs add /home/youself/cscope_ctag_db/cscope.out
 43     " else add the database pointed to by environment variable
 44     elseif $CSCOPE_DB != ""
 45         cs add $CSCOPE_DB
 46     endif
到此,ctag+cscope+taglist+Nerdtree打造sourceinsight功能已經完成。剩下的就是如何使用,如何操作了。

6. ctag+cscope+taglist+Nerdtree怎麼使用?

待更新