標籤:style blog http io color ar os 使用 for
工欲善其事,必先利其器。一個強大的開發環境可以大大提高工作效率。好吧,我知道這是廢話。。。不過,我想一定有很多跟我一樣打算進入Linux平台開發的新手,一開始都為找不到一個像Windows下的VS那樣可以一鍵安裝並且功能幾乎完美無缺的開發工具而鬱悶不已,甚至打算收回剛剛邁出的腳步。所幸的是,通過幾天努力,我總算配置出了一個功能完備的基於Vim的開發環境。這個開發環境除了基本的Vim外,還包括Ctags,Taglist,Cscope,SuperTab,OmniCppComplete,Winmanager,NERDTree和MiniBufExplorer等組件。
在開始操作前,先普及下基礎概念,然後約定一下表達規範。
1)Vim存在多個設定檔vimrc,比如/etc/vimrc,此檔案影響整個系統的Vim。還有~/.vimrc,此檔案隻影響本使用者的Vim。而且~/.vimrc檔案中的配置會覆蓋/etc/vimrc中的配置。這裡我們只修改~/.vimrc檔案。
2)Vim的外掛程式(plugin)安裝在Vim的runtimepath目錄下,你可以在Vim命令列下運行"set rtp“命令查看。這裡我們選擇安裝在~/.vim目錄,沒有就建立一個。
3)當本文說”在Vim命令列下運行cmdxx命令“時,意思是指在Vim的命令列模式下運行cmdxx命令,即在Vim的正常模式下通過輸入冒號":"進入命令列模式,然後緊接著輸入命令cmdxx。在後文描述中都會省略冒號":"輸入。
4)如果沒有說明“在Vim命令列下運行某命令”,則是在shell中執行該命令。
5)如果命令中間被空白符間隔或有與本文容易混淆的字元,我會用雙引號將命令與本文區分。所以讀者在實際操作時,不要輸入命令最前面和最後面引號。
6)本文關於組合快速鍵的描述,形如a-b形式的快速鍵表示同步選取a鍵和b鍵,而形如"a-b c"形式的快速鍵,則表示先同步選取a鍵和b鍵,然後放開ab鍵,再按下c鍵。
1,安裝使用Ctags
Ctags工具是用來遍曆原始碼檔案產生tags檔案,這些tags檔案能被編輯器或其它工具用來快速尋找定位原始碼中的符號(tag/symbol),如變數名,函數名等。比如,tags檔案就是Taglist和OmniCppComplete工作的基礎。
這裡介紹從原始碼包安裝,安裝步驟跟大多數軟體的從原始碼安裝步驟一樣。
1)從http://ctags.sourceforge.net/下載原始碼包後,解壓縮產生原始碼目錄,
2)然後進入原始碼根目錄執行./configure,
3)然後執行make,
4)編譯成功後執行make install。
5)在~/.vimrc中增加以下這行:
map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
到此,Ctags已安裝成功。
使用Ctags的也很簡單。 進入我們的項目代碼根目錄,執行以下命令:ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
另外,由於在前面第5條,我們已經在Vim中配置了Ctrl-F12組合快速鍵,所以我們也可以進入代碼根目錄後,開啟Vim,按下Ctrl-F12快速鍵自動產生tags檔案。
命令執行完後,會在原始碼目錄產生tags檔案。Vim預設會自動讀取目前的目錄下的tags檔案,所以不需要修改~/.vimrc檔案。此時,我們已經具有定義跳轉的功能了。常用快速鍵如下:
1.$ ctags –R * ($ 為Linux系統Shell提示符) 2.$ vi –t tag (請把tag替換為您欲尋找的變數或函數名) 3.:ts (ts 助記字:tags list, “:”開頭的命令為VI中命令列模式命令) 4.:tp (tp 助記字:tags preview)5.:tn (tn 助記字:tags next)6.Ctrl + ] (跳轉到定義處)7.Ctrl + T (退回至跳轉前)8.:ta x (跳轉到符號x的定義處,如果有多個符號,直接跳轉到第一處9.:ts x (列出符號x的定義)10.:tj x (可以看做上面兩個命令的合并,如果只找到一個符號定義,那麼直接跳轉到符號定義處,如果有多個,則讓使用者自行選擇) 注意:運行vim的時候,必須在“tags”檔案所在的目前的目錄下運行。否則,運行vim的時候還要用“:set tags=tags;set tags+=your path”命令設定“tags”檔案的路徑,這樣vim才能找到“tags”檔案。在完成編碼時,可以手工刪掉tags檔案(帚把不到,灰塵不掉)。
2,安裝使用Taglist
Taglist是vim的一個外掛程式,提供原始碼符號的結構化視圖。
1)從http://www.vim.org/scripts/script.php?script_id=273下載安裝包,也可以從http://vim-taglist.sourceforge.net/index.html下載。
2)進入~/.vim目錄,將Taglist安裝包解壓,解壓後會在~/.vim目錄中產生幾個新子目錄,如plugin和doc(安裝其它外掛程式時,可能還會建立autoload等其它目錄)。
3)進入~/.vim/doc目錄,在Vim下運行"helptags ."命令。此步驟是將doc下的協助文檔加入到Vim的說明主題中,這樣我們就可以通過在Vim中運行“help taglist.txt”查看taglist協助。
4)開啟設定檔~/.vimrc,加入以下兩行:
[plain] view plaincopy
- let Tlist_Show_One_File=1
- let Tlist_Exit_OnlyWindow=1
到此安裝已經完成。
在Vim命令列下運行TlistToggle命令就可以開啟Taglist視窗,再次運行TlistToggle則關閉。示圖如下:
我們可以通過Ctrl-w快速鍵或滑鼠點擊在Taglist視窗和編輯區之間切換焦點,在Taglist視窗用滑鼠或鍵盤選擇某個符號,然後點擊或斷行符號,就可以跳轉到該符號定義的位置。
更多功能可通過在Vim命令列下運行help taglist.txt查詢。
3,安裝使用Cscope
Cscope提供互動式查詢語言符號功能,如查詢哪些地方使用某個變數或調用某個函數。
Cscope已經是Vim的標準特性,預設都有支援,官方網址為http://cscope.sourceforge.net/。
1)在Vim下運行version查看Vim支援哪些特性,前面有首碼符號+的為支援。如果支援Cscope,則直接進入2),否則下載Cscope原始碼包編譯安裝。步驟同Ctags安裝。
2)確定Vim已支援Cscope後,將檔案http://cscope.sourceforge.net/cscope_maps.vim下載到~/.vim/plugin目錄。
到這裡,我們就可以開始使用Cscope了。
1)使用Cscope需要產生cscope資料庫檔案。進入項目代碼根目錄運行命令:
[plain] view plaincopy
- cscope -Rbq -f path/xxx.out
命令運行後會產生xxx.out檔案,即cscope資料庫檔案。更多用法參考man cscope文檔。
2)進入項目代碼根目錄,在Vim下運行命令:
[plain] view plaincopy
- cs add path/xxx.out
此命令將cscope資料庫載入Vim。
3)Cscope常用快速鍵
Ctrl-\ s 尋找所有當前游標所在符號出現過位置。
Ctrl-\ c 尋找所有調用當前游標所在函數的函數。
按下快速鍵尋找結束後會在編輯區下方出現尋找結果的列表,輸入結果編號並斷行符號,就能跳轉到該尋找結果在原始碼中的相應位置。例如,我們將游標移到initial_pool_size變數定義的位置,即17行,然後按下"Ctrl-\ s"組合快速鍵,得到示圖如下:
然後我們輸入2,並斷行符號,就能跳轉到第2個尋找結果。
為了介面更好看,可以把Cscope的尋找結果輸出到quickfix視窗,需要在~/.vimrc中加入下面這行:
[plain] view plaincopy
- set cscopequickfix=s-,c-,d-,i-,t-,e-
這樣,通過快速鍵尋找某個符號後,會立即跳轉到第一個找到的該符號出現的位置。如果你對這次預設跳轉的位置不滿意,在Vim命令列下運行cw命令,就能在編輯區下面quickfix視窗看到所有尋找結果的列表,點擊相應清單項目就能跳轉到相應位置。這個功能已經跟VS很接近了吧:)
更多功能可通過命令man cscope或在Vim命令列下運行help cscope查詢。
4,安裝使用OmniCppComplete
OmniCppComplete主要提供輸入時即時提供類或結構體的屬性或方法的提示和補全。跟Talist一樣,OmniCppComplete也是一個Vim外掛程式,同樣依賴與Ctags工具產生的tags檔案。安裝步驟跟Taglist類似。
從http://www.vim.org/scripts/script.php?script_id=1520下載安裝包後。
1)進入~/.vim目錄,將安裝版解壓縮
2)進入~/.vim/doc目錄,在Vim命令列下運行"helptags .”
3)在~/.vimrc中加入以下幾行:
[plain] view plaincopy
- set nocp
- filetype plugin on
OmniCppComplete的使用幾乎跟VS下的VA一樣。如所示,輸入m0.之後立即彈出my_class類中所有的函數列表,然後用上下鍵選擇合適的函數。
更多功能通過在Vim命令列下運行"help omnicppcomplete"查詢。
5,安裝使用SuperTab
SuperTab使Tab快速鍵具有更快捷的上下文提示功能。跟OmniCppComplete一樣,SuperTab也是一個Vim外掛程式。
從http://www.vim.org/scripts/script.php?script_id=1643下載安裝版。這個安裝包跟先前的幾個Vim外掛程式不同,它是一個vba檔案,即Vimball格式的安裝包,這種格式安裝包提供傻瓜式的安裝外掛程式的方法。
1)用Vim開啟.vba安裝包檔案。
2)在Vim命令列下運行命令“UseVimball ~/.vim”。此命令將安裝包解壓縮到~/.vim目錄。VImball安裝方式的便利之處在於你可以在任何目錄開啟.vba包安裝,而不用切換到安裝目的地目錄。而且不用運行helptags命令安裝協助文檔。
3)在~/.vimrc檔案中加入以下這行:
[plain] view plaincopy
- let g:SuperTabDefaultCompletionType="context"
SuperTab使用很簡單,只要在輸入變數名或路徑名等符號中途按Tab鍵,就能得到以前輸入過的符號列表,並通過Tab鍵迴圈選擇。
6,安裝使用Winmanager,NERDTree和MiniBufExplorer
前面介紹的幾個工具和外掛程式,主要提供快捷的編輯功能,如定義跳轉,符號查詢,符號提示與補全等。這裡的三個外掛程式,主要最佳化布置VIm的介面。具體來說,NERDTree提供樹形瀏覽檔案系統的介面,MiniBufExplorer提供多檔案同時編輯功能,而Winmanager將這NERDTree介面和Taglist介面整合起來,使Vim更像VS!
分別從http://www.vim.org/scripts/script.php?script_id=1658
http://www.vim.org/scripts/script.php?script_id=159
http://www.vim.org/scripts/script.php?script_id=95
下載NERDTree,MiniBufExplorer和Winmanager安裝包(Winmanager還有個更新的vba版本http://www.vim.org/scripts/script.php?script_id=1440,這裡選用舊版本的Winmanger)。
1)像其它外掛程式一樣,將NERDTree安裝包解壓到~/.vim目錄。並進入doc目錄,在Vim命令列下運行"helptags ."命令。
2)MiniBufExplorer只有一個.vim檔案,將其拷貝到~/.vim/plugin目錄。
3)在~/.vimrc檔案中加入以下幾行:
[plain] view plaincopy
- let g:miniBufExplMapWindowNavVim = 1
- let g:miniBufExplMapWindowNavArrows = 1
- let g:miniBufExplMapCTabSwitchBufs = 1
- let g:miniBufExplModSelTarget = 1
- let g:miniBufExplMoreThanOne=0
4)將Winmanager安裝包解壓到~/.vim目錄。
5)在~/.vimrc檔案中加入以下幾行:
[plain] view plaincopy
- let g:NERDTree_title="[NERDTree]"
- let g:winManagerWindowLayout="NERDTree|TagList"
-
- function! NERDTree_Start()
- exec ‘NERDTree‘
- endfunction
-
- function! NERDTree_IsValid()
- return 1
- endfunction
-
- nmap wm :WMToggle<CR>
6)這個版本的Winmanager好像有個小bug,你在開啟Winmanager介面時,會同時開啟一個空的檔案。這會影響後續使用,所以我們要在開啟Winmanager時關掉這個空檔案。在~/.vim/plugin目錄下的winmanager.vim檔案中找到以下函數定義並在第5行下添加第6行的內容:
[plain] view plaincopy
- function! <SID>ToggleWindowsManager()
- if IsWinManagerVisible()
- call s:CloseWindowsManager()
- else
- call s:StartWindowsManager()
- exe ‘q‘
- end
- endfunction
到這裡,就大功告成了!
現在進入我們的項目目錄,開啟Vim,按下組合快速鍵w-m就可以我們的嶄新的Vim了!再次按下w-m就可關閉介面。示圖如下:
介面最上面的一條窄邊就是MiniBufExplorer,可以看到我開啟了兩個檔案cache.c和assoc.c,是不是很像VS的標籤?
緊靠MiniBufExplorer下方左邊的矩形地區就是NERDTree。在這個視窗,我們可以用滑鼠或鍵盤方便的瀏覽整個檔案系統,在某個檔案上點擊或斷行符號,就可以在右邊編輯地區開啟該檔案。
NERDTree下方的就是前面安裝的Taglist介面。
7,其它有用的~/.vimrc設定
設定色彩配置,我用的是eveing方案,色彩配置儲存在/usr/share/vim/vimXY/colors
[plain] view plaincopy
- colo evening
顯示行數
[plain] view plaincopy
- set nu
與自動縮排相關的選項
[plain] view plaincopy
- set autoindent
- set tabstop=4
- set shiftwidth=4
- p; set mouse=a
VIM外掛程式攻略