from:http://blog.csdn.net/klarclm/article/details/7932558
1. 安裝Vim和基本外掛程式
$sudo apt-get install vim vim-scripts
2. Vim設定檔
Vim系統設定檔在/usr/share/vim和/etc/vim下,我們不改系統配置,只改自己user home下的配置就行了。進入自己的home目錄,建立一個名為.vimrc的檔案,把如下配置拷貝到這個檔案中:
" This line should not be removed as it ensures that various options are " properly set to work with the Vim-related packages available in Debian. 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 " Vim5 and 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 out as 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、:!、:make、CTRL-] 和 CTRL-^命令時進行;用 :buffer、CTRL-O、CTRL-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
3. ctags
安裝:$sudo apt-get install ctags
安裝好後在源碼根目錄下運行$ctags -R,產生tags索引檔案。
VI中ctags的基本用法如下:
Ctrl + ] : 跳轉到游標所在標籤的定義位置
Ctrl + O : 返回上一個標籤
Ctrl + T : 前進一個標籤
Ctrl + W + ] : 開啟一個新的view,view的位置為之前標籤的定義位置
4. 管理Vim外掛程式 --- vim-addons
安裝: $sudo apt-get install vim-addon-manager
查看當前外掛程式情況:$vim-addons status
我們在自己的home目錄下建立外掛程式子目錄,用於安裝vim外掛程式:
$cd ~
$mkdir .vim
$cd .vim
$mkdir plugin
$mkdir doc
建立好這些目錄後,使用如下命令安裝相應外掛程式
$vim-addons install [plugin]
5. 自動補全 -- OmniCppComplete
Vim自動補全可通過外掛程式 OmniCppComplete實現
安裝:$vim-addons install omnicppcomplete
配置OmniCppComplete, 在vim設定檔~/.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
在VIM中,使用如下命令可以添加tags
:set tags+=/usr/include/tags
協助文檔
:help omnicppcomplete
6. 提示函數原型echofunc
echofunc可以在命令列中提示當前輸入的函數原型
下載地址:http://www.vim.org/scripts/script.php?script_id=1735
下載後把echofunc.vim放到~/.vim/plugin下,重啟vi
在vi中鍵入函數名後,輸入"("就會在命令列中出現提示,如果函數有多個原型,按"Alt + -" 和 "Alt + ="向前和向後翻
echofunc需要tags檔案支援,並且在建立tags檔案時要加選項“--fields=+IS": $ctags -R --fields=+IS
7. 標籤瀏覽器Taglist
安裝:$vim-addons install taglist
配置taglist
在vim設定檔~/.vimrc中加入如下配置:
"-- Taglist setting -- let Tlist_Ctags_Cmd='ctags' "因為我們放在環境變數裡,所以可以直接執行 let Tlist_Use_Right_Window=1 "讓視窗顯示在右邊,0的話就是顯示在左邊 let Tlist_Show_One_File=0 "讓taglist可以同時展示多個檔案的函數列表 let Tlist_File_Fold_Auto_Close=1 "非當前檔案,函數列表摺疊隱藏 let Tlist_Exit_OnlyWindow=1 "當taglist是最後一個分割視窗時,自動推出vim "是否一直處理tags.1:處理;0:不處理 let Tlist_Process_File_Always=1 "即時更新tags let Tlist_Inc_Winwidth=0
開啟VIM後輸入命令":Tlist"開啟/關閉taglist視窗
協助文檔
:help taglist
8. 檔案瀏覽和緩衝區管理器WinManager
安裝:$vim-addons install winmanager
配置WinManager,在設定檔~/.vimrc中加入:
"-- WinManager setting -- let g:winManagerWindowLayout='FileExplorer|TagList' " 設定我們要管理的外掛程式 "let g:persistentBehaviour=0 " 如果所有編輯檔案都關閉了,退出vim nmap wm :WMToggle<cr>
在VIM 中使用命令 :WMToggle 開啟/關閉WinManager,因為我們在設定檔中做了映射,直接使用 :vm 就可以開啟/關閉了
<enter>或者雙擊進入目錄或開啟檔案
<tab>進入目錄,或者在新視窗中開啟檔案
<F5>重新整理列表
- 返回上一層
協助 : help WinManager
9. buffer管理器MiniBufferExplorer
在VIM中開啟多個檔案後,可以使用MiniBufferExplorer對他們進行管理
安裝:$vim-addons install minibufexplorer
配置:在~/vimrc中加入如下配置:
" -- MiniBufferExplorer -- let g:miniBufExplMapWindowNavVim = 1 " 按下Ctrl+h/j/k/l,可以切換到當前視窗的上下左右視窗 let g:miniBufExplMapWindowNavArrows = 1 " 按下Ctrl+箭頭,可以切換到當前視窗的上下左右視窗 let g:miniBufExplMapCTabSwitchBufs = 1 " 啟用以下兩個功能:Ctrl+tab移到下一個buffer並在當前視窗開啟;Ctrl+Shift+tab移到上一個buffer並在當前視窗開啟;ubuntu好像不支援 "let g:miniBufExplMapCTabSwitchWindows = 1 " 啟用以下兩個功能:Ctrl+tab移到下一個視窗;Ctrl+Shift+tab移到上一個視窗;ubuntu好像不支援 let g:miniBufExplModSelTarget = 1 " 不要在不可編輯內容的視窗(如TagList視窗)中開啟選中的buffer
常用命令:
<Tab> 移到上一個buffer
<Shift-Tab> 移到下一個buffer
<Enter> 開啟游標所在buffer
d 刪除游標所在buffer
10. 程式碼摺疊功能fold
在vim設定檔 ~/.vimrc中加入如下配置:
"--fold setting-- set foldmethod=syntax " 用文法高亮來定義摺疊 set foldlevel=100 " 啟動vim時不要自動摺疊代碼 set foldcolumn=5 " 設定摺疊欄寬度
常用命令:
za 開啟/關閉游標下的摺疊
zA 迴圈開啟/關閉游標下的摺疊
zo 開啟游標下的摺疊
zO 迴圈開啟游標下的所有摺疊
zc 關閉游標下的摺疊
zC 迴圈關閉游標下的所有摺疊
zM 關閉所有摺疊
zR 開啟所有摺疊
協助 :help fold
11. 項目分類樹管理器Project
Project用於顯示項目的分類樹,分類樹預設儲存在 ~/.vimprojects檔案中
安裝:$vim-addons install project
Project分類樹產生:
a. 開啟vim,鍵入命令 :Project,左邊出現project框
b. 命令模式下輸入\C,出現建立Project的資訊,填入這些資訊就可以了
12. quickfix命令集
通過quickfix命令集,可以在vim內編譯器,如果有錯誤可以直接跳到錯誤位置修改,然後重新編譯,加快開發速度
在設定檔中加入如下配置:
"-- QuickFix setting -- " 按下F6,執行make clean map <F6> :make clean<CR><CR><CR> " 按下F7,執行make編譯器,並開啟quickfix視窗,顯示編譯資訊 map <F7> :make<CR><CR><CR> :copen<CR><CR> " 按下F8,游標移到上一個錯誤所在的行 map <F8> :cp<CR> " 按下F9,游標移到下一個錯誤所在的行 map <F9> :cn<CR> " 以上的映射是使上面的快速鍵在插入模式下也能用 imap <F6> <ESC>:make clean<CR><CR><CR> imap <F7> <ESC>:make<CR><CR><CR> :copen<CR><CR> imap <F8> <ESC>:cp<CR> imap <F9> <ESC>:cn<CR>
常用命令
:make {arguments}
如果出差按<Enter>回到vim介面,鍵入如下命令開啟quickfix視窗
:cw[indow]
雙擊某條出差資訊,就會自動跳到相應出差位置
: cn[ext] 下一條錯誤位置
:cp[revious] 上一條錯誤位置
:cfirst 第一處錯誤
:clast 最後一處錯誤
:cc 詳細資料
: cl[ist] 錯誤資訊概覽
協助 : help quickfix
13. Cscope
Cscope是一個類似ctags的工具,不過功能更加強大
安裝:$sudo apt-get install cscope
在設定檔~/.vimrc中加入配置:
"-- Cscope setting -- if has("cscope") set csprg=/usr/bin/cscope " 指定用來執行cscope的命令 set csto=0 " 設定cstag命令尋找次序:0先找cscope資料庫再找標籤檔案;1先找標籤檔案再找cscope資料庫 set cst " 同時搜尋cscope資料庫和標籤檔案 set cscopequickfix=s-,c-,d-,i-,t-,e- " 使用QuickFix視窗來顯示cscope尋找結果 set nocsverb if filereadable("cscope.out") " 若目前的目錄下存在cscope資料庫,添加該資料庫到vim cs add cscope.out elseif $CSCOPE_DB != "" " 否則只要環境變數CSCOPE_DB不為空白,則添加其指定的資料庫到vim cs add $CSCOPE_DB endif set csverb endif map <F4> :cs add ./cscope.out .<CR><CR><CR> :cs reset<CR> imap <F4> <ESC>:cs add ./cscope.out .<CR><CR><CR> :cs reset<CR> " 將:cs find c等Cscope尋找命令映射為<C-_>c等快速鍵(按法是先按Ctrl+Shift+-, 然後很快再按下c) nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR> nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR> nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR> nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR> nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR> nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR> nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR> nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<CR><CR> :copen<CR><CR>
建立cscope庫:
$cscope -Rbq
將cscope庫添加到vim:開啟某個檔案,鍵入命令 :cs add cscope.out,
cscope的主要功能是通過 find 子命令來實現的,通過如下命令使用
:cs find c|d|e|f|g|i|s|t name
0/s 尋找這個符號
1/g 尋找這個定義
2/d 尋找這個函數調用的函數
3/c 尋找調用過這個函數的函數
4/t 尋找這個字串
6/e 尋找這個egrep模式
7/f 尋找這個檔案
8/i 尋找包含這個檔案的檔案
協助 :help if_cscop
14. 編程相關常用快速鍵
% 跳轉到配對的括弧
[[ 跳轉到當前或者上一代碼塊(函數定義、類定義)開頭
][ 跳轉到當前代碼塊結尾
]] 跳轉到下一代碼塊開頭
[/ 跳轉到注釋開頭 (對/* */有效)
]/ 跳轉到注釋結尾(對/* */有效)
gD 跳轉到當前檔案內標識符首次出現的位置,可用於跳轉到變數的定義處
gd 跳轉到當前函數內標識符首次出現的位置,可用於跳轉到局部變數的定義處
'' 跳轉到游標上次所在位置,兩個'