2013年2月23日 星期六

使用 pathogen 管理 VIM 的插件 (plugin)

幫 VIM 添加 SrcExpl 這個插件時,一下子將檔案複製到 ~/.vim/doc 目錄,又一下子將檔案複製到 ~/.vim/plugin 目錄的,現在使用的插件數量少倒還沒什麼,我想到將來若 VIM 裡安排了一大堆插件後,若要搞明白那個檔案是那個插件、又那個檔案是那個版本的,光是想像就頭疼了。繼續在網上爬了爬文,找到 pathogen 這個插件,它可以用來幫我們簡單地管理 VIM 的插件,只要將插件在 ~/.vim/bundle 目錄下建立目錄扔進去就搞定,要刪除也不過將那個插件的目錄刪除就行了。

既然有這麼方便的插件,當然要安裝來使用囉!仔細再讀讀說明,只要在 ~/.vim 下建立兩個目錄,一個是放置 pathogen.vim 的 ~/.vim/autoload 目錄,而另一個用來放置插件的 ~/.vim/bundle 目錄。然後將 pathogen.vim 下載複製到 ~/.vim/autoload 目錄內。

接著修改 ~/.vimrc 這個檔案,在「最前面」加上一行 execute pathogen#infect() 就搞定了。最後依據說明及反覆驗證的結果,我加了幾下這兩行:

execute pathogen#infect()
filetype plugin indent on 

另外,在爬文找到的「使用github管理VIM」這篇文章更乾脆直接利用 github 來管理 VIM 的設定檔 .vimrc 和所有的插件,不過我目前在 VIM 使用的插件只有 SrcExpl 這一組,就暫時不搞 github 了。

延伸閱讀:

使用 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 版。

延伸閱讀: