- Introduction
有用過一些IDE來寫程式的人,應該都很熟悉像source insight (如下圖)這樣子的介面,
左邊有變數, 常數, 宣告和函數的導覽,右邊則是主程式視窗,
然後看到想追的code就可以看誰呼叫他的還是函數原型 ,
其實這些vim+Plugin也可以做的到,但是也許沒有像這些IDE那麼強大,但是有些功能用習慣以後,其實也很方便。
List
~~~~~~~~~~~~~~~~~以下正文~~~~~~~~~~~~~~~~~
兩個方式安裝ctag
sudo apt-get install exuberant-ctags
以下老梗四步驟(不清楚的話就請看INSTALL檔):
- 解壓縮
- tar -zvxf ctags-5.8.tar.gz
- cd ctags-5.8
- 組態設定
- ../configure
- 編譯
- make
- 安裝
- sudo make install
目前最新的版本是taglist_46.zip
- 解壓縮
- unzip taglist_46.zip
- 複製檔案
- cp ./plugin/taglist.vim ~/.vim
- cp ./doc/taglist.txt ~/.vim
我們想要有個快捷鍵,一按就可以開啟taglist的介面,
所以需要修改vimrc設定檔:
(以下設定都是以local user為主,如果想要用root去安裝請自行修改成/etc/vim/vimrc,而不是~/.vimrc)
- vim ~/.vimrc
加入底下這一行
- map <f9> :Tlist<CR>
要查字典,總要先把字典準備好吧!
假設我現在要修改一支driver檔案。
所以我必須先要準備linux kernel的ctag,
到kernel的根目錄下,然後下指令(會等一陣子):
- ctags -R *
然後你就會發現有個檔案「tags」出現了:
我們來嘗試編輯一個hid mouse driver看看:
- vim drivers/hid/usbhid/usbmouse.c
一般來說,進入vim 的command mode以後,輸入:
- :set tags=./tags
就會把tags檔案給讀進來了,又或者你有兩個以上的tag,用逗號隔開就好,如下:
- :set tags=./tags,./TAGS,tags,TAGS
但是因為我們剛剛有設定快捷鍵,所以只要按F9就好了,ctag如果在一樣的路徑就會自己讀進來了,畫面就會如下
其實這樣子的畫面呈現就是利用本身vim的split語法,將畫面給切割成兩邊,有興趣的可以參考這一篇「
兩邊要切換有兩種方式
1. Ctrl + w 然後在按w,就會切換到另一邊。
2. Ctrl + w然後在按左右鍵,看你要切換哪一邊。
假設你現在要到某個函數去,假設要到「usb_mouse_irq」去,就把游標移到左邊視窗的「usb_mouse_irq」處,然後按Enter就好,你就會發現右邊的source code已經到相對應的地方了。
假設現在我們對usb_mouse_irq這個funciton有興趣,我們要看他的定義跟source code,我們把游標移到右邊的函數名稱去,然後按下「Ctrl + ]」 ,如果ctags有順利讀取進來的話,也沒什麼太大問題的話,你就會發現視窗已經到函數定義那邊去了,如下。
又或者你可以直接在command mode輸入以下:
- :ta input_report_key
他也會直接跳到函數定義去,但是我想,直接按兩個鍵還是比較方便吧,所以這個就參考就好了。
函數察看完了,我想要在跳回剛剛的usb_mouse_irq怎麼辦?簡單,只要按下「Ctrl + t」他就會自己跳回去了
如果直接在左邊taglist的function上按空白鍵,就會看到底下會有訊息說,
目前這份檔案有多少個函數,如下:
然後如果直接在函數名稱上按空白鍵,底下會出現函數原型(prototype):
有時候遇到函數名稱重複時,那要怎麼去查看哪個才是自己需要的呢?
這就要用到指令ts了,假設我們有個函數叫作「mch_delay」:
- :ts mch_delay
然後會出現如下訊息:
清楚看到3個函數定義在不同的檔案裡,所以這時選擇1~3在按下Enter就好。
那有沒有辦法直接快速的直接這3個定義直接上一個下一個的切換呢?答案是有:
Jump to next matching tag
- :tn
Jump to previous matching tag
- :tp
這東西也真是博大精深,
如果想要在了解更多的細節的話,請查閱:
- :help tagstack
No comments:
Post a Comment