標籤:style blog http color 使用 strong
最近本人在看《TCP/IP Illustrated Volume2:The Implementation》這本書,自然要下載4.4BSD-Lite的原始碼配合書本一起研讀。以前學習Vim的時候就知道Vim可以通過外掛程式的功能來配置一個功能強大的自訂IDE,這次有這麼好的機會為什麼不利用一下呢?於是在閱讀原始碼的過程中根據需要一步一步配置了一個簡單完整的IDE環境,通過這幾天的使用真心覺得Vim好用,速度那個快呀。以前總聽別人說Vim如何如何好,這次真的讓我感受到了並愛上了Vim這個工具。在這裡強烈推薦沒有嘗試過的可以自己嘗試下,下面來看看我是怎麼一步步將Vim配置成一個功能基本齊全的IDE的。
一、準備工作
- 安裝Git(因為下面我們選擇的外掛程式管理器需要使用到它)
- 安裝其他外掛程式前首先需要選擇一個Vim外掛程式管理器,我這裡選擇的是Vundle,Vundle的工作過程中需要通過Git自動從遠程創庫同步外掛程式安裝包到本地倉庫(Vundle的預設本地倉庫位置是~/.vim/bundle/)
- 通過Git下載Vundle安裝包:$ git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
- 在~/.vimrc中添加Vundle的配置內容:
1 set nocompatible " be iMproved, required 2 filetype on " required 3 4 " set the runtime path to include Vundle and initialize 5 set rtp+=~/.vim/bundle/Vundle.vim 6 call vundle#begin() 7 " alternatively, pass a path where Vundle should install plugins 8 "call vundle#begin(‘~/some/path/here‘) 9 10 " let Vundle manage Vundle, required11 Plugin ‘gmarik/Vundle.vim‘12 13 " plugin from http://vim-scripts.org/vim/scripts.html14 Plugin ‘L9‘15 " Git plugin not hosted on GitHub16 " Plugin ‘git://git.wincent.com/command-t.git‘17 " git repos on your local machine (i.e. when working on your own plugin)18 " Plugin ‘file:///home/gmarik/path/to/plugin‘19 " The sparkup vim script is in a subdirectory of this repo called vim.20 " Pass the path to set the runtimepath properly.21 " Plugin ‘rstacruz/sparkup‘, {‘rtp‘: ‘vim/‘}22 " Avoid a name conflict with L923 " Plugin ‘user/L9‘, {‘name‘: ‘newL9‘}24 25 " All of your Plugins must be added before the following line26 call vundle#end() " required27 filetype plugin indent on " required28 " To ignore plugin indent changes, instead use:29 "filetype plugin on30 "31 " Brief help32 " :PluginList - list configured plugins33 " :PluginInstall(!) - install (update) plugins34 " :PluginSearch(!) foo - search (or refresh cache first) for foo35 " :PluginClean(!) - confirm (or auto-approve) removal of unused plugins36 "37 " see :h vundle for more details or wiki for FAQ38 " Put your non-Plugin stuff after this line
View Code
- 有兩種方式安裝新外掛程式,通過命令列參數的方式如:$ vim +PluginInstall +qall或者直接運行:$vim,然後按:PluginInstall進入命令模式,直到左下方狀態列出現Done!提示說明外掛程式安裝成功,退出再進入就可以使用我們在~/.vimrc中配置的外掛程式了
- 安裝ctags軟體:$ yum install ctags
二、產生tags檔案
為了可以利用Vim本身提供的tag功能來定位程式裡面出現的宏定義和方法定義(源檔案之間跳轉),在你的工程根目錄運行命令:$ ctags -R --language-force=c++ *,這裡語言要指定為c++,如果指定為c則不會產生.h檔案的tag。操作成功後在目前的目錄就可以發現一個tags檔案了,在~/.vimrc中添加一行配置資訊如:set tags=/opt/dev/4.4BSD-Lite/tags來告訴vim tag索引檔案的位置。再次運行vim就可以通過按Ctrl+]來快速跳轉到游標下方的函數或宏的定義處,查看代碼非常方便。通過]+d可以在vim狀態列顯示當前檔案中定義的宏的內容(不用跳轉)
三、按需添加外掛程式
(1)顯示分類樹外掛程式(NERDTree)
- 在~/.vimrc的Plugin段中添加一行安裝配置:Plugin ‘scrooloose/nerdtree‘
- 在~/.vimrc裡面修改該外掛程式的開啟命令按鍵映射:map <F4> :NERDTree<cr>
- 儲存被修改的設定檔,重新運行vim,如:$ vim /opt/dev
- 按F4功能鍵即可調用該外掛程式顯示當前工作目錄的分類樹,按?或者協助資訊,按q退出該外掛程式(當開啟多個tab時可以通過gt或視窗index+gt在tab之間快速切換,按T以安靜方式開啟新tab即開啟新tab後繼續留在當前tab)
(2)檔案尋找外掛程式(CtrlP)
- 在~/.vimrc的Plugin段中添加一行安裝配置:Plugin ‘kien/ctrlp.vim‘
- 在~/.vimrc裡面修改該外掛程式的開啟命令按鍵映射及配置:
let g:ctrlp_map = ‘<c-p>‘ "hotkey Ctrl+p open ctrlp pluginlet g:ctrlp_cmd = ‘CtrlP‘let g:ctrlp_working_path_mode = ‘0‘ "disable work path mode
- 儲存被修改的設定檔,重新運行vim,如:$ vim /opt/dev
- 按Ctrl+p即可調用該外掛程式(每次運行第一次開啟需要稍微等一下,該外掛程式對工作目錄進行掃描建立緩衝,如果目錄結構有變化按F5進行緩衝重新整理,我找了下沒有發現儲存掃描緩衝的功能),按ESC退出該外掛程式(Ctrl+t在新tab中開啟選中的檔案);:CtrlPMRU 在最近使用最多的檔案裡面尋找結果;:CtrlPBuffer在find buffer裡面尋找結果;按..進入上一級目錄中
(3)函數名列表(CtrlPFunky),該外掛程式是CtrlP外掛程式的一個擴充,必須先裝CtrlP
- 在~/.vimrc的Plugin段中添加一行安裝配置:Plugin ‘tacahiroy/ctrlp-funky‘
- 在~/.vimrc裡面修改該外掛程式的命令按鍵映射及配置:
map <F6> :CtrlPFunky<cr>let g:ctrlp_extensions = [‘funky‘]let g:ctrlp_funky_syntax_highlight = 1
- 儲存被修改的設定檔,重新運行vim開啟一個c源檔案,按F6鍵即可看到當前檔案的函數列表,上下鍵移動選擇條目按斷行符號即可跳到函數定義處
(4)源檔案中函數、變數、結構體、宏等元素的列表(taglist)
- 在~/.vimrc的Plugin段中添加一行安裝配置:Plugin ‘vim-scripts/taglist.vim‘
- 在~/.vimrc裡面修改該外掛程式的命令按鍵映射及配置:
map <F5> :Tlist<cr>let Tlist_Show_One_File = 1let Tlist_Exit_OnlyWindow = 1 let Tlist_Use_Right_Window = 1let Tlist_GainFocus_On_ToggleOpen = 1
- 儲存被修改的設定檔,重新運行vim開啟一個c源檔案,按F5鍵即可在右邊子視窗看到當前檔案的個元素的列表,上下鍵移動選擇條目按斷行符號即可跳到函數定義處,F1查看協助資訊,在選擇的對象上按<space>可以在狀態列看到各元素的定義;按減號(-)關閉一個節點,按*開啟關閉的結點
四、後記
上面四個外掛程式就是我當前閱讀原始碼的IDE配置,對於我來說已經足夠滿足我的工作需要了;由於這次時間倉促Vim裡面還有很多人性化的配置及外掛程式沒來得及發現,隨著我對Vim更深入的瞭解及在使用過程中遇到的新問題,還會有更多優秀的功能及外掛程式,到時候再來分享。
為了方便的儲存每次的工作狀態及再次運行Vim的時候恢複上次工作狀態需要在~/.vimrc中添加如下兩行配置(也就是Vim的Session管理功能):
map <F2> :mksession! ~/vim_session <cr> " Quick write session with F2map <F3> :source ~/vim_session <cr> " And load session with F3