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