1. 程式人生 > >Vim的IDE配置(詳細教程)

Vim的IDE配置(詳細教程)

轉自:Figthing
我的vim IDE介面:
一步步將vim改造成C/C++開發環境(IDE) - Nealson - Figthing的部落格
1、安裝Vim和Vim基本外掛
首先安裝好Vim和Vim的基本外掛。這些使用apt-get安裝即可:
[email protected]:~/arm$sudo apt-get install vim vim-scripts vim-doc
其中vim-scripts是vim的一些基本外掛,包括語法高亮的支援、縮排等等。
vim中文幫助文件tar包下載地址:
http://sourceforge.net/projects/vimcdoc/files/vimcdoc/
解壓後其中有個doc資料夾, 將其中的內容全部複製到~/.vim/doc, 或者vim安裝目錄下的doc目錄中, 此時vim中的help資訊已經是中文的了.

網頁版中文幫助文件網址http://vimcdoc.sourceforge.net/doc/help.html
首頁就時vim幫助文件的目錄,閱讀起來更方便有效、更有針對性!

2、Vim配置檔案
Vim強大的功能,其來源基本上就兩個地方:Vim外掛以及Vim配置檔案。
Vim 本身的系統配置資料夾是在/usr/share/vim/和/etc/vim/兩個資料夾下。一般情況下,我們不會去改變這兩個資料夾下的配置檔案,而是 在使用者資料夾/home/user(其中,user為使用者名稱,我的使用者名稱是lingd)下建立自己的配置檔案。進入使用者資料夾(/home/user/) 之後,用gedit新建一個名叫.vimrc的檔案:

[email protected]:~/arm$ cd ~
[email protected]:~$ gedit .vimrc
注:使用gedit主要是為了方便大段大段的文字貼上!
然後把下面的文字拷貝進這個檔案之後儲存:

" This line should not be removed as it ensures that various options are " properly set to work with the Vim-related packages available inDebian. debian.vim " Uncomment the next line to make Vim more Vi-compatible

" NOTE: debian.vim sets 'nocompatible'.Setting'compatible' changes numerous " options, so any other options should be set AFTER setting 'compatible'. set nocompatible "Vim5and later versions support syntax highlighting.Uncommenting the " following enables syntax highlighting by default. if has("syntax") syntax on "語法高亮 endif colorscheme ron " elflord ron peachpuff default 設定配色方案,vim自帶的配色方案儲存在/usr/share/vim/vim72/colors目錄下 " detect file type filetype on filetype plugin on " If using a dark background within the editing area and syntax highlighting " turn on this option as well set background=dark " Uncomment the following to have Vim jump to the last position when " reopening a file if has("autocmd") au BufReadPost*if line("'\"")>1&& line("'\"")<= line("$")| exe "normal! g'\""| endif "have Vim load indentation rules and plugins according to the detected filetype filetype plugin indent on endif "The following are commented outas they cause vim to behave a lot " differently from regular Vi. They are highly recommended though. "set ignorecase " 搜尋模式裡忽略大小寫 "set smartcase " 如果搜尋模式包含大寫字元,不使用 'ignorecase' 選項。只有在輸入搜尋模式並且開啟 'ignorecase' 選項時才會使用。 set autowrite "自動把內容寫回檔案:如果檔案被修改過,在每個:next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:makeCTRL-] CTRL-^命令時進行;用:bufferCTRL-OCTRL-I'{A-Z0-9} 或 `{A-Z0-9} 命令轉到別的檔案時亦然。 set autoindent " 設定自動對齊(縮排):即每行的縮排值與上一行相等;使用 noautoindent 取消設定 "set smartindent " 智慧對齊方式 set tabstop=4 " 設定製表符(tab鍵)的寬度 set softtabstop=4 " 設定軟製表符的寬度 set shiftwidth=4 " (自動) 縮排使用的4個空格 set cindent " 使用 C/C++ 語言的自動縮排方式 set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s "設定C/C++語言的具體縮排方式 "set backspace=2 " 設定退格鍵可用 set showmatch " 設定匹配模式,顯示匹配的括號 set linebreak " 整詞換行 set whichwrap=b,s,<,>,[,] " 游標從行首和行末時可以跳到另一行去 "set hidden " Hide buffers when they are abandoned set mouse=a " Enable mouse usage (all modes) "使用滑鼠 set number " Enable line number "顯示行號 "set previewwindow " 標識預覽視窗 set history=50 " set command history to 50 "歷史記錄50條 "--狀態行設定-- set laststatus=2 " 總顯示最後一個視窗的狀態行;設為1則視窗數多於一個的時候顯示最後一個視窗的狀態行;0不顯示最後一個視窗的狀態行 set ruler " 標尺,用於顯示游標位置的行號和列號,逗號分隔。每個視窗都有自己的標尺。如果視窗有狀態行,標尺在那裡顯示。否則,它顯示在螢幕的最後一行上。 "--命令列設定-- set showcmd " 命令列顯示輸入的命令 set showmode " 命令列顯示vim當前模式 "--find setting-- set incsearch " 輸入字串就顯示匹配點 set hlsearch

注:配置檔案中,以單個雙引號開頭的文字為註釋。
儲存檔案之後,啟動Vim。此時,Vim已經是這種效果了(語法高亮挺漂亮的–這個是由vim-scripts中的外掛支援的):

3、ctags安裝與配置
ctags可以建立原始碼樹的標籤索引(標籤就是一個識別符號被定義的地方,如函式定義),使程式設計師在程式設計時能迅速定位函式、變數、巨集定義等位置去檢視原形
以下是在ubuntu下ctags的下載安裝和配置過程:
下載並安裝ctags,終端輸入命令
[email protected]:~/arm$ sudo apt-get install ctags
建立原始碼索引,比如我經常需要查閱Linux的核心程式碼,而這些程式碼放在/home/lingd/arm/linux-2.6.24.7目錄下
那麼在終端進入到該目錄後,輸入命令ctags -R *,你會發現多了一個tags檔案,這個就是索引檔案
[email protected]:~/arm$ cd linux-2.6.24.7
[email protected]:~/arm/linux-2.6.24.7$ ls
arch     crypto         include  kernel       mm              samples   usr
block    Documentation  init     lib          net             scripts
COPYING  drivers        ipc      MAINTAINERS  README          security
CREDITS  fs             Kbuild   Makefile     REPORTING-BUGS  sound
[email protected]:~/arm/linux-2.6.24.7$ ctags -R *
[email protected]:~/arm/linux-2.6.24.7$ ls
arch     crypto         include  kernel       mm              samples   tags
block    Documentation  init     lib          net             scripts   usr
COPYING  drivers        ipc      MAINTAINERS  README          security
CREDITS  fs             Kbuild   Makefile     REPORTING-BUGS  sound
向vim註冊索引檔案tags的路徑,
[email protected]:~/arm/linux-2.6.24.7$ vi ~/.vimrc
在開啟檔案的最後新增如下內容(當然,具體路徑根據你自己的情況)

"--ctags setting-- "按下F5重新生成tag檔案,並更新taglist map <F5>:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR>:TlistUpdate<CR> imap <F5><ESC>:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR>:TlistUpdate<CR> set tags=tags set tags+=./tags "add current directory's generated tags file set tags+=~/arm/linux-2.6.24.7/tags "add new tags file(剛剛生成tags的路徑,在ctags -R 生成tags檔案後,不要將tags移動到別的目錄,否則ctrl+]時,會提示找不到原始碼檔案)

set tags+=./tags表示在當前工作目錄下搜尋tags檔案
set tags+=~/arm/linux-2.6.24.7/tags表示在搜尋tags檔案的時候,也要搜尋~/arm/linux-2.6.24.7/資料夾下的tags檔案。
然後儲存並退出vi。這樣,你就可以用vim在任意地方檢視有關Linux的函式原形
------------------------------------
tag命令用法:
Ctrl+]  跳到當前游標下單詞的標籤
Ctrl+O  返回上一個標籤
Ctrl+T  返回上一個標籤
:tag TagName 跳到TagName標籤
以上命令是在當前視窗顯示標籤,當前視窗的檔案替代為包標籤的檔案,當前視窗游標跳到標籤位置。如果不希望在當前視窗顯示標籤,可以使用以下命令:
:stag TagName 新視窗顯示TagName標籤,游標跳到標籤處
Ctrl+W + ]  新視窗顯示當前游標下單詞的標籤,游標跳到標籤處
當一個標籤有多個匹配項時(函式 (或類中的方法) 被多次定義),":tags" 命令會跳轉到第一處。如果在當前檔案中存在匹配,那它將會被首先使用。
可以用這些命令在各匹配的標籤間移動:
:tfirst    到第一個匹配
:[count]tprevious 向前 [count] 個匹配
:[count]tnext  向後 [count] 個匹配
:tlast    到最後一個匹配
或者使用以下命令選擇要跳轉到哪一個
:tselect TagName
輸入以上命令後,vim會為你展示一個選擇列表。然後你可以輸入要跳轉到的匹配代號 (在第一列)。其它列的資訊可以讓你知道標籤在何處被定義過。
以下命令將在預覽視窗顯示標籤
:ptag TagName 預覽視窗顯示TagName標籤,游標跳到標籤處
Ctrl+W + }  預覽視窗顯示當前游標下單詞的標籤,游標跳到標籤處
:pclose   關閉預覽視窗
:pedit file.h 在預覽視窗中編輯檔案file.h(在編輯標頭檔案時很有用)
:psearch atoi 查詢當前檔案和任何包含檔案中的單詞並在預覽視窗中顯示匹配,在使用沒有標籤檔案的庫函式時十分有用。 

最簡單的使用方法舉例
用vi在任意目錄寫一個Test.c檔案,內容如下:

int main(void) { printf("Hello World!\n"); return0; }

寫好後末行模式輸入w儲存好(不要退出vi),按Esc回到指令模式,把游標停留在printf上
然後按 Ctrl+W + ],vi會自動跳到Linux系統函式printf()處,這時我們能檢視printf()的原形
檢視完了,按Ctrl+o(回到上一個標籤) 就回到原來的地方
一步步將vim改造成C/C++開發環境(IDE) - Nealson - Figthing的部落格
4、管理vim外掛——vim-addons
通 過vim-addons,我們可以管理vim外掛。我們在sudo apt-get install vim vim-scripts vim-doc時,一般會自動安裝上vim-addons。若未安裝可通過sudo apt-get install vim-addon-manager手動安裝。安裝完成後,就可以用vim-addons管理vim外掛了。
# 系統中已有的vim-scripts中包含的外掛及其狀態:
[email protected]:~$ vim-addons status
# Name                     User Status  System Status
align                       removed       removed      
alternate                   removed       removed      
bufexplorer                 removed       removed      
calendar                    removed       removed      
closetag                    removed       removed      
colors sampler pack         removed       removed      
cvsmenu                     removed       removed      
debPlugin                   removed       removed      
detectindent                removed       removed      
doxygen-toolkit             removed       removed      
editexisting                removed       removed      
enhanced-commentify         removed       removed      
gnupg                       removed       removed      
info                        removed       removed      
justify                     removed       removed      
lbdbq                       removed       removed      
markdown-syntax             removed       removed      
matchit                     removed       removed      
minibufexplorer             installed     removed      
nerd-commenter              removed       removed      
omnicppcomplete             installed     removed      
po                          removed       removed      
project                     installed     removed      
python-indent               removed       removed      
secure-modelines            removed       removed      
snippetsEmu                 removed       removed      
sokoban                     removed       removed      
supertab                    removed       removed      
surround                    removed       removed      
taglist                     installed     removed      
tetris                      removed       removed      
utl                         removed       removed      
vcscommand                  removed       removed      
vimplate                    removed       removed      
whatdomain                  removed       removed      
winmanager                  removed       removed      
xmledit                     removed       removed    
上 面我們介紹瞭如何獨立於系統配置檔案之外,建立自己的Vim配置檔案。當我們自己下載安裝Vim外掛的時候,也可以另外建立目錄,放置我們自己的外掛。這 個目錄一般為/home/user/.vim,另外還需要建立一個外掛子目錄,一個外掛文件子目錄,以上的可以進入/home/user目錄下通過下面的 命令執行:
[email protected]:~$ mkdir .vim
[email protected]:~$ cd .vim
[email protected]:~/.vim$ mkdir plugin
[email protected]:~/.vim$ mkdir doc 
# vim官方外掛的安裝,xxxx是要安裝的外掛名,以status中顯示的名稱為準。安裝外掛xxxx時使用以下命令(前提是在目錄/home/user/.vim/下建立好了plugin和doc兩個資料夾)
vim-addons install xxxx
 關於vim-addons命令的詳細用法,可以通過“man vim-addons”檢視其幫助文件

5、vim自動補全——OmniCppComplete
vim的自動補全功能可通過其外掛OmniCppComplete實現。
安裝OmniCppComplete
[email protected]:~$ vim-addons install omnicppcomplete
配置OmniCppComplete
在vim配置檔案/home/user/.vimrc中加入如下的配置:

"-- omnicppcomplete setting -- "按下F3自動補全程式碼,注意該對映語句後不能有其他字元,包括tab;否則按下F3會自動補全一些亂碼 imap <F3><C-X><C-O> " 按下F2根據標頭檔案內關鍵字補全 imap <F2> <C-X><C-I> set completeopt=menu,menuone "關掉智慧補全時的預覽視窗 let OmniCpp_MayCompleteDot=1" autocomplete with . let OmniCpp_MayCompleteArrow = 1 " autocomplete with-> let OmniCpp_MayCompleteScope=1" autocomplete with :: let OmniCpp_SelectFirstItem = 2 "select first item (but don't insert) let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window let OmniCpp_GlobalScopeSearch=1 " enable the global scope search let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members "let OmniCpp_DefaultNamespaces=["std"] let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column let OmniCpp_ShowAccess=1

(前幾行就是提供了C++中的./->/::等操作符的提示和自動完成)。
OmniCppComplete 是基於ctags資料庫即tags檔案實現的(基於ctags生成的索引資訊來實現自動補全的),所以在ctags -R生成tags時還需要一些額外的選項,這樣生成的tags檔案才能與OmniCppComplete配合運作。使用下列命令生成tags檔案,就可以 與OmniCppComplete配合運作:
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
--c++-kinds=+p  : 為C++檔案增加函式原型的標籤
--fields=+iaS   : 在標籤檔案中加入繼承資訊(i)、類成員的訪問控制資訊(a)、以及函式的指紋(S)
--extra=+q      : 為標籤增加類修飾符。注意,如果沒有此選項,將不能對類成員補全
# vim自動補全功能的測試
# 為了測試自動補全功能,我們先下載C++一份C++標準庫的原始碼。
[email protected]:~$ sudo apt-get install build-essential
# 然後在/usr/include/c++下就可以找到標準庫的標頭檔案了。
[email protected]:~$ cd /usr/include/c++
[email protected]:/usr/include/c++$ ls
4.4  4.4.3
# 在此資料夾下生成能與OmniCppComplete配合運作的tags檔案
[email protected]:/usr/include/c++$ ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
[email protected]:/usr/include/c++$ ls
4.4  4.4.3  tags
# 在vim的配置檔案中如下內容,然後在程式設計的時候就可以使用自動補全功能了。
[email protected]:/usr/include/c++$ vi ~/.vimrc

set tags+=/usr/include/c++/tags

# 用vi開啟前面的Test.c檔案,在printf("Hello World!\n")下一行中,輸入pri,然後按下Ctrl+X Ctrl+O,此時vi會彈出一個視窗,所有以pri開頭的tag都會出現在這個視窗中,printf就出現在第6行中
[email protected]:~$ cd ~
[email protected]:~$ vim Test.c
一步步將vim改造成C/C++開發環境(IDE) - Nealson - Figthing的部落格
注 意:在自動補全的點,Vim必須知道可能補全的定義。比如說,在namespace std名稱空間下的變數和函式,必須要用using namespace std;暴露出來,否則是不能補全的。在.cpp檔案中還可以,在.h檔案中這樣就不是好的做法了。暫時不知道這個問題是由於我自己配置錯誤還是程式沒有 實現。
當自動補全下拉視窗彈出後,一些可用的快捷鍵:
Ctrl+P  向前切換成員
Ctrl+N  向後切換成員
Ctrl+E  表示退出下拉視窗, 並退回到原來錄入的文字
Ctrl+Y  表示退出下拉視窗, 並接受當前選項
其他補全方式:
Ctrl+X Ctrl+L 整行補全
Ctrl+X Ctrl+N  根據當前檔案裡關鍵字補全
Ctrl+X Ctrl+K  根據字典補全
Ctrl+X Ctrl+T  根據同義詞字典補全
Ctrl+X Ctrl+I  根據標頭檔案內關鍵字補全
Ctrl+X Ctrl+]  根據標籤補全
Ctrl+X Ctrl+F  補全檔名
Ctrl+X Ctrl+D  補全巨集定義
Ctrl+X Ctrl+V  補全vim命令
Ctrl+X Ctrl+U  使用者自定義補全方式
Ctrl+X Ctrl+S  拼寫建議
幫助文件
:help omnicppcomplete

6、提示函式原型echofunc
echofunc可以在命令列中提示當前輸入函式的原型。
echofunc下載地址:http://www.vim.org/scripts/script.php?script_id=1735
下載完成後,把echofunc.vim檔案放到 ~/.vim/plugin資料夾中
當 你在vim插入(insert)模式下緊接著函式名後輸入一個"("的時候, 這個函式的宣告就會自動顯示在命令列中。如果這個函式有多個宣告, 則可以通過按鍵"Alt+-"和"Alt+="向前和向後翻頁, 這個兩個鍵可以通過設定g:EchoFuncKeyNext和g:EchoFuncKeyPrev引數來修改。這個外掛需要tags檔案的支援, 並且在建立tags檔案的時候要加選項"--fields=+lS"(OmniCppComplete建立的tag檔案也能用), 整個建立tags檔案的命令如下:
$ ctags -R --fields=+lS
其他外掛說明詳見echofunc.vim