利用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怎麼使用?

待更新

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章