雖然平時比較習慣使用 Eclipse,但一直以來免不了要在 Terminal 下修改一些程式碼,所以偶爾也用用 VIM 這個編輯器。這陣子爬了爬文,也試著將 VIM 加了些外掛功能,也讓 VIM 用起來更方便些。首先要搞的就是讓 VIM 更貼近 Eclipse 或 Source Insight 些。
爬文後,找到一個評價頗高的外掛,就是這個 SrcExpl。
- SrcExpl - a Source code Explorer which works like the context window of "Source Insight" : vim online
- Trinity - the Trinity of taglist, NERDtree and SrcExpl: an IDE works like "Source Insight" : vim online
- taglist.vim : Source code browser (supports C/C++, java, perl, python, tcl, sql, php, etc)
- The NERD tree : A tree explorer plugin for navigating the filesystem
首先,下載了 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 版。
延伸閱讀:
- 邁向偉大航道的旅程:啟航: 用 vim 有效閱讀 Android framework 程式碼
- 史丹利部落格: Vim + Trinity + Source Explorer + Tag List + NERD_tree + ctags
- 用vim阅读代码的最好方法 - 永攀最高峰 - Linux 人 社区 - Linux 人
- 改造vim变成source insight - T_arm的专栏 - 博客频道 - CSDN.NET
- 麻亮腦袋空蕩蕩: Vim with Mouse
- vi/vim使用进阶: 程序员的利器 – cscope | 易水博客
- vi/Vim + Cscope/Ctags | 易水博客
- vim - How to use cscope with paths that contain spaces - Stack Overflow
- Rickey's pets: 打造自己的VIM: 源碼追蹤(ctags+cscope)及預覽視窗SrcExpl
沒有留言:
張貼留言