2013年2月23日 星期六

使用 SrcExpl 強化 VIM 的 Source Explorer 能力

雖然平時比較習慣使用 Eclipse,但一直以來免不了要在 Terminal 下修改一些程式碼,所以偶爾也用用 VIM 這個編輯器。這陣子爬了爬文,也試著將 VIM 加了些外掛功能,也讓 VIM 用起來更方便些。首先要搞的就是讓 VIM 更貼近 EclipseSource Insight 些。

爬文後,找到一個評價頗高的外掛,就是這個 SrcExpl。

首先,下載了 SrcExpl 最新版本 (5.1) 的 SrcExpl-5.1.zip,將解壓縮後得到的 doc 及 plugin 兩個目錄複製到 ~/.vim 目錄內。

接著,根據 SrcExpl 的說明,若想讓 VIM 像 Source Insight 一樣工作,還需要一個外掛 Trinity (trinity.vim),於是再下載 Trinity 2.0 的 Trinity-2.0.zip,並將解壓縮得到的 NERD_tree.vim 及 trinity.vim 兩個檔案複製到 ~/.vim/plugin 目錄內。

接著,分別依照 SrcExpl 及 Trinity 的說明將以下兩段設定寫到 ~/.vimrc 檔裡。

SrcExpl :

" // The switch of the Source Explorer 
nmap <F8> :SrcExplToggle<CR> 

" // Set the height of Source Explorer window 
let g:SrcExpl_winHeight = 8 

" // Set 100 ms for refreshing the Source Explorer 
let g:SrcExpl_refreshTime = 100 

" // Set "Enter" key to jump into the exact definition context 
let g:SrcExpl_jumpKey = "<ENTER>" 

" // Set "Space" key for back from the definition context 
let g:SrcExpl_gobackKey = "<SPACE>" 

" // In order to Avoid conflicts, the Source Explorer should know what plugins 
" // are using buffers. And you need add their bufname into the list below 
" // according to the command ":buffers!" 
let g:SrcExpl_pluginList = [ 
        \ "__Tag_List__", 
        \ "_NERD_tree_", 
        \ "Source_Explorer" 
    \ ] 

" // Enable/Disable the local definition searching, and note that this is not 
" // guaranteed to work, the Source Explorer doesn't check the syntax for now. 
" // It only searches for a match with the keyword according to command 'gd' 
let g:SrcExpl_searchLocalDef = 1 

" // Do not let the Source Explorer update the tags file when opening 
let g:SrcExpl_isUpdateTags = 0 

" // Use 'Exuberant Ctags' with '--sort=foldcase -R .' or '-L cscope.files' to 
" //  create/update a tags file 
let g:SrcExpl_updateTagsCmd = "ctags --sort=foldcase -R ." 

" // Set "<F12>" key for updating the tags file artificially 
let g:SrcExpl_updateTagsKey = "<F12>"  

Trinity :

" Open and close all the three plugins on the same time 
nmap <F8>  :TrinityToggleAll<CR> 

" Open and close the Source Explorer separately 
nmap <F9>  :TrinityToggleSourceExplorer<CR> 

" Open and close the Taglist separately 
nmap <F10> :TrinityToggleTagList<CR> 

" Open and close the NERD Tree separately 
nmap <F11> :TrinityToggleNERDTree<CR>  

接著,再根據 Trinity 的說明下載了 Taglist 的 taglist_45.zip,並將解壓縮得到的 plugin/taglist.vim 及 doc/taglist.txt 兩個檔案分別複製到 ~/.vim/plugin 及 ~/.vim/doc 目錄內。

接著再修改 ~/.vimrc,讓 VIM 支援滑鼠的動作。爬文的結果多半將它寫成 set mouse=a,但由於平時我習慣使用 PuTTY 連上 Linux 主機,這樣一來會變得不好用,所以我將它改成以下這樣:

set mouse=n

如此一來,在 VIM 裡按 F8 鍵時,就會開啟如下圖的分割視窗,

若是再按下 F10 鍵,則會執行 ctags 的指令來建立標籤索引檔,讓 VIM 搭配 ctags 來查找程式碼。

ctags --sort=foldcase -R . 

其中對於 F10 鍵的這個功能就讓我有點疑惑了,改天再來仔細看看這幾個外掛的細節吧!

最後另外一點,在 Trinity 2.0 裡包含了一個 NERD_tree.vim,但打開看了看,它應該是 2008 年 7 月 20 日發表的 2.13.0 版,不過在 NERD tree 的網頁上目前可以看到最新版本是 4.2.0 版。我在 NERD tree 的網頁下載了 2.13.0 版來看 Trinity 2.0 的 NERD_tree.vim 比較了一下,這兩個檔案的內容有些許的不同,我想應該是 Trinity 2.0 的維護者 Wenlong Che 作了修改吧!因此,我暫時沒有將 NERD tree 更換成 4.2.0 版。

延伸閱讀:

張貼留言