最近VIM用得比較多,因此在學了很多。在這裏對收穫到的東西作一個總結。 php
vim配合這3件東西以後,極爲強大。與SourceInsight有一拼。 shell
ctags叫做「標籤」,它記錄源碼中全部標識符定義所在的文件與行號。 編程
先在命令終端運行一下: vim
$ ctags --version
看一下當前系統有有沒有安裝ctags,若是有就跳過本節。 ide
我是在http://ctags.sourceforge.net/上下載的最近的源碼,解壓,配置,編譯,安裝。 函數
$ tar zxvf ctags-5.8.tar.gz $ cd ctags-5.8 $ ./configure && make ... $ sudo make install
而後再檢查一下是否成功安裝 學習
$ ctags --version
一般是沒問題的。 this
在我們的源碼目錄下執行簡單的 spa
$ ctags -R .
ctags就會遍歷當前目錄下的全部.c,.h,.cpp文件,提取全部的標識符並記錄到tags文件中。 .net
進入vim可又使用標籤參數,使vim打開時跳到標籤所在位置。若是咱們要找WinMain,以下:
$ vi -t WinMain
進行vim以後,經常使用的幾個命令:
快捷鍵:
cscope比ctags更強大,它不只記錄標識符定義所在的位置,還記錄了標識符(函數)之間的調用關係與文件的包含關係,功能更多。只不過沒ctags使用簡單。
一樣先檢查一下cscope有沒有安裝。
若是沒有安裝就從網上下載源碼進行安裝。下載地址:http://cscope.sourceforge.net/
一樣步驟:解壓,配置,編譯,安裝。與ctags同樣。
與ctags相似,首先得生成一個cscope.out文件。這個文件與tags文件功能相似,但比較複雜。
$ find . -name "*.h" -o -name "*.c" -o -name "*.cpp" > cscope.files $ cscope -bkq -i cscope.files $ rm cscope.files
cscope就會生成一個cscope.out文件。
而後在當前的目錄下打開vim。在vim在執行命令將cscope.out加進來:
: cs add cscope.out
好了,如今cscope就可又用了。
經常使用的搜索命令格式:
: cs find {querytype} {ident} 或 : cs f {querytype} {ident}
其中{querytype}表示:
num | querytype | function descript |
0 | s | C符號出現過的地方 |
1 | g | 定義的地方 |
2 | d | 被這個函數調用的函數列表 |
3 | c | 調用這個函數的函數列表 |
4 | t | 搜字串 |
6 | e | egrep匹配 |
7 | f | 搜索文件 |
8 | i | 包含這個文件的文件列表 |
一般咱們會在~/.vimrc文件中進行一下按鍵映射,使操做便簡便:
nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR> 或 nmap <C-@>s :cs find s <C-R><C-W><CR>
其實的依此類推:
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " cscope setting """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" if has("cscope") set csprg=/usr/bin/cscope set csto=1 set cst set nocsverb " add any database in current directory if filereadable("cscope.out") cs add cscope.out endif set csverb endif nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR> nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR> nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR> nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR> nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR> nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR> nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR> nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>
其中 <C-@>s 表示 [Ctrl+空格] 後再按 s 鍵。
個人安裝使用沒有上面說的那麼順。使用的時候,我執行
:cs add cscope.out
顯示:
E319: Sorry, the command is not available in this version.
最後出的緣由是編譯的時候沒有加入cscope模塊。
執行vim命令查看:
$ vim --version | grep cscope ... -cscope ...
cscope前是減號,說明當前vim裏沒有加入這個模塊。
找到vim的源碼包,進入源碼路譯。
$ ./configure --help | grep cscope --enable-cscope Include cscope interface
說明若是要在vim中使用cscope,就得在配置的時候加入--enable-cscope參數。以下:
$ ./configure --enable-cscope && make
編譯完了以後,先別急着安裝,檢查一下新編譯的vim可執行文件是否具備cscope功能。
$ .src/vim --version | grep cscope ... +cscope ...
若是看到cscope前面是個加號,就表示有cscope功能。
而後纔是安裝:
$ sudo make install
安裝完了以後,還要檢查一下vi有沒有更新。常常有網友問爲何加了--enable-cscope編譯安裝仍是不行呢?緣由是,你安裝的是vim,而vi在某些系統裏是另外一個獨立的程序,vi不會自動更新。
將原來的vi連接爲新安裝的vim
$ vi_path=`which vi` $ sudo rm $vi_path $ sudo ln -s `which vim` $vi_path
OK,咱們再來檢驗一下vi是否還有cscope功能。
$ vi --version | grep cscope ... +cscope ...
如上就對了!
上面講了ctags與cscope,若是你把上面兩樣用熟了,vim是很強大的。
taglist是一個插件,它可又顯示光標所在文件的文件結構,包括函數、類、宏定義等等。很少說,這個插件在網上有下載:http://www.vim.org/scripts/script.php?script_id=273
下載後,解壓到~/.vim目錄下。其實裏面就只有兩個件:
具體怎麼作,上面那個網頁寫的很清楚了。
其實我在系統上一安裝好vim後,就會當即到網上去下載一個.vimrc啓動配置文件。如下是我以前收藏共享的經過模板(不是我寫的,我只根據個人習慣改):http://www.oschina.net/code/snippet_243525_20881
你們可又去下載,覆蓋~/.vimrc便可。
在我共享的這個~/.vimrc中,已經包括了基本的縮進、顏色、Tab寬以及對ctags, cscope, taglist 等組件的配置。這裏我例舉幾個裏面已提供的功能。
建議你們本身去學習這個文件的內容。