閱讀大型工程的源代碼時(shí),我們經(jīng)常需要在多個(gè)源文件之間實(shí)現(xiàn)函數(shù)、宏定義、外部變量等的跳轉(zhuǎn)查詢,但這些功能僅靠vim完成是困難的,所以還需借助一些額外的工具來打造一款合適自己的vim。 1、安裝VIM 安裝vim比較簡單,也沒有特別要注意的地方,這里就不多講。如果你是在ubuntu系統(tǒng)下,直接采用: $ sudo apt-get install vim或者$ sudo apt-get install vim-gnome。安裝好之后,試編輯一個(gè)文件,看看是否運(yùn)行正常(一般不會(huì)有問題)。然后看看自己的用戶目錄下有沒有一個(gè)vim隱藏配置文件:.vimrc文件和一個(gè).vim隱藏文件夾:.vim如果沒有,可以通過下面方式創(chuàng)建: 1) 打開vim,在命令行模式下輸入::!cp -i $VIMRUNTIME/vimrc_example.vim ~/.vimrc 就會(huì)在自己的用戶目錄下生成vim隱藏配置文件:.vimrc。 2) cd到用戶目錄下,運(yùn)行下面命令: $ mkdir -p /.vim/{plugin,doc,syntax} 就會(huì)產(chǎn)生三個(gè)目錄:~/.vim/plugin、~/.vim/doc、~/.vim/syntax 3)在自己的用戶目錄下新建 .vim 隱藏文件夾: $ mkdir .vim 2、ctag的配置 tags文件是實(shí)現(xiàn)跳轉(zhuǎn)功能的數(shù)據(jù)庫文件,就是它把我們送到我們想要去的地方的。比如我們在程序里調(diào)用一個(gè)函數(shù)i2c_master_recv,在某個(gè)時(shí)刻想查看這函數(shù)本身是怎么實(shí)現(xiàn)的。那只需把光標(biāo)停在關(guān)鍵詞上,再按一下組合鍵:“ctrl+]”, 就會(huì)立刻跳轉(zhuǎn)到庫函數(shù)i2c_master_recv的源代碼的地方,再按一下組合鍵 “ctrl+o” 就可以跳回來。 當(dāng)然如果你要查詢的函數(shù)是對(duì)一個(gè)系統(tǒng)調(diào)用的封裝,你就可以順著tags 提供的道路跳到內(nèi)核去查看源代碼是怎么寫的,當(dāng)然這時(shí)候可能會(huì)有不止簡單的兩層封裝定義,但我們一次次跳轉(zhuǎn)就可以深入其里,了解內(nèi)幕。 首先,我們要安裝ctags工具: $ sudo apt-get install ctags 如果提示找不到軟件包c(diǎn)tags,就update一下你的軟件源,還不行的話試試把ctags改成 exuberant-ctags。下載完后,你就可以用它來產(chǎn)生標(biāo)簽文件tags了。 ctags常用命令列舉: 1) 建立數(shù)據(jù)庫命令 # ctags -R或者exuberant-ctags -R // 這個(gè)命令是在終端命令行下執(zhí)行的(-R表示遞歸向下) 2) 在vim編輯器中瀏覽 :ta x 跳轉(zhuǎn)到符號(hào)x的定義處,如果有多個(gè)符號(hào),直接跳轉(zhuǎn)到第一處 :ts x 列出符號(hào)x的定義 :tj x 可看做上面兩個(gè)命令的合并,如果只找到一個(gè)符號(hào)定義,那么直接跳轉(zhuǎn)到符號(hào)定義處,如果有多個(gè),則讓用戶自行選擇。 Ctrl+] 跳轉(zhuǎn)到當(dāng)前光標(biāo)下符號(hào)的定義處,和ta類似。 Ctrl+t 跳轉(zhuǎn)到上一個(gè)符號(hào)定義處,和上面的配合基本上就能自由跳轉(zhuǎn)了。 :tn和:tp 是在符號(hào)的多個(gè)定義之間跳轉(zhuǎn)。 3、使用VIM插件TagList(源代碼結(jié)構(gòu)瀏覽) Taglist是vim的一個(gè)插件,可以方便地在終端側(cè)邊顯示出當(dāng)前程序所有的函數(shù)、宏等信息,支持鼠標(biāo)雙擊跳轉(zhuǎn),對(duì)于規(guī)模比較大的代碼而言,這是一個(gè)非常實(shí)用功能。 下載鏈接:http://download.csdn.net/source/249784 下載完解壓,得到兩個(gè)文件夾 doc和plugin,將兩個(gè)文件夾存放到用戶目錄下的隱藏文件夾.vim下(還記得.vim這個(gè)路徑吧)。然后,用vim打開程序源碼,敲下命令:Tlist 打開列表,再輸入一次關(guān)閉列表。 4、使用文件瀏覽器和窗口管理器WinManager 在使用vim的過程中,你也許會(huì)碰到這樣的情況:你本來想打開一個(gè)文件,但是錯(cuò)誤的用vim打開了一個(gè)路徑,這時(shí)候,居然沒有返回錯(cuò)誤信息,而是給出一個(gè)這個(gè)路徑下的文件列表。這一功能實(shí)際上是由vim的文件瀏覽器插件netrw實(shí)現(xiàn)的。我們?nèi)绾伟堰@一功能應(yīng)用到平時(shí)閱讀海量源代碼的過程中呢?如何將TagList窗口和netrw窗口整合起來呢?這時(shí)候,WinManager插件就派上用場了。 下載鏈接:http://www./scripts/script.php?script_id=95 在 ~/.vim 目錄下解壓 winmanager.zip,然后在~/.vimrc中增加下面兩句: let g:winManagerWindowLayout='FileExplorer|TagList' nmap wm :WMToggle<cr> 在vim的normal狀態(tài)下輸入"wm",即可發(fā)現(xiàn)很奇妙的分割串口畫面。 5、配置cscope 先安裝吧,$ sudo apt-get install cscope。 然后在~/.vimrc中增加一句: :set cscopequickfix=s-,c-,d-,i-,t-,e- 這步操作的目的是設(shè)定是否使用 quickfix 窗口來顯示 cscope 的查詢結(jié)果。 跟Ctags類似,要使用其功能必須先為你的代碼生成一個(gè)cscope的數(shù)據(jù)庫,在項(xiàng)目的根目錄運(yùn)行下面的命令: $ cscope -Rbq 會(huì)生成三個(gè)文件: -rw-rw-r-- 1 wooin wooin 1.1M 2007-09-30 10:56 cscope.in.out -rw-rw-r-- 1 wooin wooin 6.7M 2007-09-30 10:56 cscope.out -rw-rw-r-- 1 wooin wooin 5.1M 2007-09-30 10:56 cscope.po.out 這時(shí)候,你可以把下面這條命令寫進(jìn)~/.vimrc文件里面,以保證每次打開vim都會(huì)加載cscope數(shù)據(jù)庫文件: cs add /home/zhangxiaoqi/eclair_101206/cscope.out /home/zhangxiaoqi/eclair_101206/ 上面這條指令的意思是讓/home/zhangxiaoqi/eclair_101206/路徑下的所有文件都有權(quán)訪問/home/zhangxiaoqi/eclair_101206/cscope.out數(shù)據(jù)庫文件。這一步操作是和ctag類似的(你可以回去看看ctags的配置)。 這時(shí),你可以打開某一個(gè)源程序文件, 開始編輯。下面來做一個(gè)具體的操作, 查找函數(shù)good()的定義, 用命令: :cs find g good |
|