本文環境:ubuntu 10.10/vim7.2
基本配置
1) 建立基本環境:
建立三個目錄:mkdir ~/.vim/{plugin,doc,syntax} -p
建立配置檔案:touch ~/.vimrc
.vimrc是vim的主要配置檔案,我們在配置VIM時首先對它進行基本的設定。打開home目錄下剛剛建立的.vimrc檔案,可以對VIM進行如下的一系列基本選項設定:
set wildmenu “增強模式中的指令行自動完成操作 set foldmethod=manual “設定折疊方式為手動 set cin “實作C程式的縮進 set sta “插入<tab>時使用’shiftwidth’ set backspace=2 “指明在插入模式下可以使用<BS>删除光标前面的字元 syntax enable “設定高亮關鍵字顯示 set nocompatible “去掉讨厭的有關vi一緻性模式,避免以前版本的一些bug和局限 set number “顯示行号 filetype on “檢測檔案的類型 set history=1000 “”記錄曆史的行數 set background=dark “背景使用黑色 set autoindent set smartindent “上面兩行在進行編寫代碼時,在格式對起上很有用; “第一行,vim使用自動對起,也就是把目前行的對起格式應用到下一行; “第二行,依據上面的對起格式,智能的選擇對起方式,對于類似C語言編寫上很有用 “第一行設定tab鍵為4個空格,第二行設定當行之間交錯時使用4個空格 set tabstop=4 set shiftwidth=4 set showmatch “設定比對模式,類似當輸入一個左括号時會比對相應的那個右括号 set ruler “在編輯過程中,在右下角顯示光标位置的狀态行 set incsearch “查詢時非常友善,如要查找book單詞,當輸入到/b時,會自動找到第一 “個b開頭的單詞,當輸入到/bo時,會自動找到第一個bo開頭的單詞,依 “次類推,進行查找時,使用此設定會快速找到答案,當你找要比對的單詞 “時,别忘記回車。 set enc=utf-8 “設定編碼為中文 set winaltkeys=no “Alt組合鍵不映射到菜單上 set laststatus=2 “總是出現狀态欄 set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P> “設定狀态欄 set hidden “設定隐藏已修改buffer autocmd FileType python setlocal et sta sw=4 sts=4
2)安裝中文幫助手冊
安裝:
$tar xvf vimcdoc-1.7.0.tar.gz $ cd vimcdoc-1.7.0/ $ ./vimcdoc.sh -i
在一堆done後完成。在~/.vimrc裡加上set helplang=cn 這句話标明幫助文檔為中文。在vim中”:help”後就能看到效果。
插件配置
首先要在.vimrc中添加以下語句來使能插件:
filetype plugin on filetype plugin indent on
1.代碼快速編輯和編譯運作:C-support,Bash-support
C-support下載下傳安裝:
安裝:将下載下傳的檔案解壓放到~/.vim目錄中
Bash-support下載下傳安裝:
安裝:将下載下傳檔案解壓放到~/.vim目錄中
使用方法:
a)自動添加檔案頭:
添加你自己的資訊: vim ~/.vim/c-support/templates/Templates
~/.vim/c-support/templates 這個目錄下還有許多模闆,你可以自己定制。現在試着vim test.c看一看效果。 b)快捷輸入

Shell
2.閱讀源代碼:Ctags+Tag List +Win Manger+Cscope
這三個分别是生成标簽、列出标簽(使用ctags)、列出檔案、代碼跳轉。
下載下傳安裝:
下載下傳安裝Exuberant Ctags :sudo apt-get install exuberant-ctags
(我們安裝ctags但是并不直接使用它作為代碼跳轉工具,而是使用cscope)
安裝:解壓到home目錄下的.vim子目錄中。
下載下傳安裝cscope:sudo apt-get install cscope
配置:
進入$HOME/.vim/doc打開 Vim 運作 “:helptags .” 這是要保證taglist幫助可以正常使用。
ctags -R -f ~/.vim/systags –c-kinds=+p –c++-kinds=+px –fields=+iaS –extra=+q –python-kinds=-i /usr/include /usr/local/include
随後在vimrc中添加如下幾行:
“禁止自動改變目前Vim視窗的大小 let Tlist_Inc_Winwidth=0 “把方法清單放在螢幕的右側 let Tlist_Use_Right_Window=1 “讓目前不被編輯的檔案的方法清單自動折疊起來, 這樣可以節約一些螢幕空間 let Tlist_File_Fold_Auto_Close=1 “映射F3為功能鍵調出winmanager的檔案浏覽器 “映射輕按兩下F3調出Taglist的符号浏覽器 “let g:winManagerWindowLayout=’FileExplorer|TagList’ “你要是喜歡這種布局可以注釋掉這一行 map <F3> :WMToggle<cr> map <F3><F3> :TlistToggle<cr> “将系統已經生成的tags導入 set tags+=~/.vim/systags “映射F10為添加cscope和ctags map <F10> :call Do_CsTag()<CR> map <F10><F10> :call Add_CsTag()<CR> nmap <C-\>s :cs find s <C-R>=expand(“<cword>”)<CR><CR> nmap <C-\>g :cs find g <C-R>=expand(“<cword>”)<CR><CR> nmap <C-\>c :cs find c <C-R>=expand(“<cword>”)<CR><CR> nmap <C-\>t :cs find t <C-R>=expand(“<cword>”)<CR><CR> nmap <C-\>e :cs find e <C-R>=expand(“<cword>”)<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> nmap <C-\>d :cs find d <C-R>=expand(“<cword>”)<CR><CR> function Do_CsTag() silent! execute “!ctags -R ‘.’” if(executable(‘cscope’) && has(“cscope”) ) silent! execute “!find -L `pwd` -name ‘*.h’ -o -name ‘*.c’ -o -name ‘*.cpp’ -o -name ‘*.java’ -o -name ‘*.cs’ -o -name ‘*.cxx’ -o -name ‘*.hxx’> cscope.files -o -name ‘*.hpp’ -o -name ‘*.py’” endif silent! execute “!cscope -bq” silent! execute “call Add_CsTag()” endf function Add_CsTag() if filereadable(“cscope.out”) execute “cs add cscope.out” execute “set tags+=./tags” endif silent! execute “call Add_CsTag()”
輕按兩下F3調出函數、變量等tags。 單擊F3出現檔案管理器(重複這個過程關閉)。以上産生的子區域都是通過Crtl+ww來互相跳轉 單擊F10生成這個目錄及其子目錄的tags以及cscope檔案,并添加。 輕按兩下F10僅加載tags和cscope檔案 将光标指向一些函數名或者變量名,使用Crtl+\+以下字母來跳轉,并使用Crtl+O跳轉回來
s: 查找C語言符号,即查找函數名、宏、枚舉值等出現的地方 g: 查找函數、宏、枚舉等定義的位置,類似ctags所提供的功能 d: 查找本函數調用的函數 c: 查找調用本函數的函數 t: 查找指定的字元串 e: 查找egrep模式,相當于egrep功能,但查找速度快多了 f: 查找并打開檔案,類似vim的find功能 i: 查找包含本檔案的檔案
gd 轉到目前光标所指的局部變量的定義 * 轉到目前光标所指的單詞下一次出現的地方 # 轉到目前光标所指的單詞上一次出現的地方 ctrl+] 轉到函數定義的地方 ctrl+o 回退到函數調用的地方 TagList操作:
<CR> 跳到光标下tag所定義的位置,用滑鼠輕按兩下此tag功能也一樣
o 在一個新打開的視窗中顯示光标下tag
<Space> 顯示光标下tag的原型定義
u 更新taglist視窗中的tag
s 更改排序方式,在按名字排序和按出現順序排序間切換
x taglist視窗放大和縮小,友善檢視較長的tag
+ 打開一個折疊,同zo
- 将tag折疊起來,同zc
* 打開所有的折疊,同zR
= 将所有tag折疊起來,同zM
[[ 跳到前一個檔案
]] 跳到後一個檔案
q 關閉taglist視窗
<F1> 顯示幫助
WinManager操作:
3.同名頭檔案和源檔案切換:A
在.vimrc中添加:map <F11> :A<cr>
使用: 在源檔案或者頭檔案中用F11就可以切換了。
4.代碼塊和常用語句模闆自動補全:code_complete
把插件檔案中的tab都改為C-b防止與後來我們要安裝的supertab沖突。
另外,這個是基于ctags的,是以要生成或加載tags,參見2)部分。
将下邊這一段加入到template段中以添加bash模闆補全功能
“Bash Templates “Bash Structure by [email protected] let g:template['sh'] = {} let g:template['sh']['sif'] = “if “.g:rs.”…”.g:re.” ; then/”.g:rs.”…”.g:re.”/fi” let g:template['sh']['sife'] = “if “.g:rs.”…”.g:re.” ; then/”.g:rs.”…”.g:re.”/else/”.g:rs.”…”. /g:re.”/fi” let g:template['sh']['scase'] = “case “.g:rs.”…”.g:re.” in/”.g:rs.”…”.g:re.”)//” .g:rs.”…”.g:re.”;;//”. /g:rs.”…”.g:re.”)//” .g:rs.”…”.g:re.”;;///esac/” let g:template['sh']['swhile'] = “while “.g:rs.”…”.g:re.” /do/”.g:rs.”…”.g:re.”/done” let g:template['sh']['suntil'] = “until “.g:rs.”…”.g:re.” /do/”.g:rs.”…”.g:re.”/done” let g:template['sh']['sfor'] = “for “.g:rs.”…”.g:re.” in ” .g:rs.”…”.g:re.”/do/”.g:rs.”…”.g:re.”/done” let g:template['sh']['sselect'] = “select “.g:rs.”…”.g:re.” in ” .g:rs.”…”.g:re.”/do/”.g:rs.”…”.g:re.”/done”
使用:在輸入函數時可以快速輸入是安裝這個插件的主要目的。比如,輸入main,然後Crtl+b就可以看到效果了。對于函數,在輸入strlen(後按C-b,會補全參數,然後再按C-b就可以一個個填寫參數了。
具體哪些可以補全如下:
C/C++語言:
cc /* */
de #define
in #include “”
is #include <>
ff #ifndef
ife if…els
for for(;;)
switch switch() case: …
main int main()
BASH:
sif if
sife if…els
scase case
swhile while
suntil until
sfor for
sselect select
5.代碼補全:supertab+snipMate+omnicppcomplete
下載下傳位址:
<a href="http://www.vim.org/scripts/download_script.php?src_id=16104">http://www.vim.org/scripts/download_script.php?src_id=16104</a>
<a href="http://www.vim.org/scripts/download_script.php?src_id=16345">http://www.vim.org/scripts/download_script.php?src_id=16345</a>
安裝:用vim打開supertab.vba,然後使用:so % 進行安裝。後兩者直接解壓在.vim目錄裡即可。
設定:進入vim
:helptags ~/.vim/doc
并且在~/.vim/snippets/python.snippets中添加如下資訊:
snippet header #!/usr/bin/env python “”" File: `Filename(‘$1.py’, ‘foo.py’)` Author: gnuhpc Company: CMBC Date: `strftime(“%Y-%m-%d %T %Z”)` Description: ${1}
使用:
使用tab就可以完成一些檔案中已經出現的詞彙的補全和常見結構的補全了,這個功能與code_complete的結構快速補充有所重疊,不過是使用tab鍵,你還可以在.vim/snippets目錄裡自己定制。 添加的header是為了python自動生成header,在.py檔案中,首先輸入header後按tab就會出現這個header,具體的資訊可以根據個人情況修改。
6.原型提示:echofunc
然後在.vimrc中設定:
let g:EchoFuncKeyNext=’<C-n>’ let g:EchoFuncKeyPrev=’<C-p>’
使用:可以試着輸入select(就可以看到了下邊的原型提示了)。用Ctrl+n和Ctrl+p來上下翻動。 小技巧:可以将這個插件與code_complete結合,在看到提示後按Ctrl+b補全函數,然後按Ctrl+b,從左往右順序一個個填寫參數。
7.C/STL/Python Doc提示:CRefVim 、stlrefvim 、Pyref
<a href="http://www.vim.org/scripts/download_script.php?src_id=3666">http://www.vim.org/scripts/download_script.php?src_id=3666</a>
<a href="http://www.vim.org/scripts/download_script.php?src_id=9160">http://www.vim.org/scripts/download_script.php?src_id=9160</a>
<a href="http://www.vim.org/scripts/download_script.php?src_id=14576">http://www.vim.org/scripts/download_script.php?src_id=14576</a>
解壓後将crefvim目錄裡的所有目錄都複制到.vim/下,其餘的在.vim目錄解壓即可。
然後進入vim後” :helptags ~/.vim/doc”
設定:
打開plugin/stlrefvim.vim中将’tr’改為’cr’,這個是為了好記憶。 把plugin/pyref.vim移動到ftplugin中,這樣隻針對python檔案的插件。 在.vimrc中添加:let g:pyref_mapping = ‘K’
\cr 檢視C語言常見函數和操作符的使用指南(C Reference) \sr檢視STL常見方法的使用指南 (STL Reference) 再加上Shift+k查詢man以及Python手冊,就全了。
8.簡單注釋:comments
使用:在visual <Shift-V> 模式下,ctrl-c注釋,ctrl-x去注釋。
9.代碼格式整理:astyle
下載下傳安裝:$sudo apt-get install astyle
在vimrc中寫入:
“定義源代碼格式化 map <F12> :call FormartSrc()<CR> “定義FormartSrc() func FormartSrc() exec “w” if &filetype == ‘c’ exec “!astyle % –style=ansi –suffix=none %” exec “e! %” elseif &filetype == ‘cpp’ “exec “!astyle % –style=ansi –suffix=none %” “exec “e! %” elseif &filetype == ‘perl’ exec “!astyle –style=gnu –suffix=none %” elseif &filetype == ‘py’ elseif &filetype == ‘java’ exec “!astyle –style=java –suffix=none %” elseif &filetype == ‘jsp’ elseif &filetype == ‘xml’ elseif &filetype == ‘html’ elseif &filetype == ‘htm’ endfunc “結束定義FormartSrc
使用:<F12> 進行代碼格式化。
10.多tab支援:NERD_tree
“設定tab的快捷鍵 “Shift+t為建立一個标簽,按兩次Shirt+t為跳轉标簽 map <S-t> :tabnew .<CR> map <S-t><S-t> <ESC>:tabnext<CR>
使用:Shift+t就可以建立一個标簽,連按Shfit+t兩次就可以切換标簽。
11. Python自動補全支援:Pydiction
将complete-dict檔案放到~/.vim/tools/pydiction/目錄中。
“pydiction 1.2 python auto complete let g:pydiction_location = ‘~/.vim/tools/pydiction/complete-dict’ let g:pydiction_menu_height = 20
使用:采用tab鍵進行自動補全,比如import os.此時可以按tab進行補全。
12.自動檢查Python文法:pyflakes-vim
使用:當你的python腳本文法有問題時,自動會在出錯處标紅,并在螢幕下方顯示錯誤原因提示。
13. Python常用功能:python_fn.vim
14. Python代碼自動折疊:Efficient python folding
使用:f為折疊起來,F(Shift-f)是打開已經折疊的代碼。
15.代碼文檔化工具:Doxygen
安裝doxygen:sudo apt-get install doxygen
配置:.vimrc中添加,其中個人資訊可以自己修改
map <F4>aoxAuthor<CR> map <F4>f![]()
【Linux開發技術之工具使用】配置VIM下程式設計和代碼閱讀環境 ox<CR> map <F4>b![]()
【Linux開發技術之工具使用】配置VIM下程式設計和代碼閱讀環境 oxBlock<CR> map <F4>l![]()
【Linux開發技術之工具使用】配置VIM下程式設計和代碼閱讀環境 oxLic<CR> map <F4>c odocClass<C-B> map <F4>m odocMember<C-B> let s:licenseTag = “Copyright(C)\<enter>” let s:licenseTag = s:licenseTag . “For free\<enter>” let s:licenseTag = s:licenseTag . “All right reserved\<enter>” let g:DoxygenToolkit_licenseTag = s:licenseTag let g:DoxygenToolkit_briefTag_funcName=”yes” let g:doxygen_enhanced_color=1![]()
【Linux開發技術之工具使用】配置VIM下程式設計和代碼閱讀環境
使用:(需要安裝doxygen)
F4-a 檔案頭注釋 F4-f 函數頭注釋 F4-b 程式塊注釋 F4-l license塊注釋 F4-c 類注釋 F4-m 類成員注釋
16.配置一鍵編譯調試
在.vimrc中設定:
map <F8> :w<CR>:call CompileRun()<CR> map <F8><F8> :w<CR>:call Debug()<CR> func CompileRun() exec “w” if &filetype == ‘c’ exec “!gcc % -g -o %<” exec “!.\/%<” elseif &filetype ==’cpp’ exec “!g++ % -g -o %<” elseif &filetype == ‘python’ exec “!python %” func Debug() exec “!rm %<” exec “!gdb %<” exec “!rm %<.class” exec “!javac %” exec “!jdb %<” exec “!pdb %”
使用:F8編譯運作程式,輕按兩下F8為調試程式
17.shell腳本自動加上執行權限
在.vimrc中配置:
function ModeChange() if getline(1) =~ “^#!” if getline(1) =~ “/bin/” silent !chmod a+x <afile> endif endfunction au BufWritePost * call ModeChange()
使用:在.sh檔案編輯後自動被賦予執行權限。
18.從上次退出時編輯的位置繼續編輯
autocmd BufReadPost * \ if line(“‘\”") > 0 && line (“‘\”") <= line(“$”) | \ exe “normal g’\”" | \ endif
使用:在退出一個檔案編輯後再次進入時會自動跳轉到上次編輯的地方。
19.配置括号自動添加
:inoremap ( ()<ESC>i :inoremap ) <c-r>=ClosePair(‘)’)<CR> :inoremap { {}<ESC>i :inoremap } <c-r>=ClosePair(‘}’)<CR> :inoremap [ []<ESC>i :inoremap ] <c-r>=ClosePair(‘]’)<CR> :inoremap < <><ESC>i :inoremap > <c-r>=ClosePair(‘>’)<CR> function ClosePair(char) if getline(‘.’)[col('.') - 1] == a:char return “\<Right>” else return a:char
使用:大中小圓括号的自動比對添加。
20.添加一些快捷鍵:
在.vimrc中添加:
map <F5> :w<CR>:make<CR> map <F5><F5> :make clean<CR> map <F6> :cw<CR> map <F6><F6> :ccl<CR> map <F7> :cn<CR> map <F7><F7> :cp<CR> map <S-o> o<ESC><CR> map <C-a> ggVG map <S-q><S-q> :q!<CR>:q!<CR>:q!<CR> map <C-H> :L1,L2s/src/tar/g map <S-F12> <ESC>I//<ESC><CR> map! <S-F12> <ESC>I//<ESC><CR> map <S-F12><S-F12> 02x<ESC><CR> map! <S-F12><S-F12> <ESC>02x<ESC><CR> map <F12> <ESC>$a// map! <F12> <ESC>$a//
F5 make 2*F5 make clean F6 quickfix檢視詳細資訊 2*F6 關閉詳細資訊 F7 下一個結果 2*F7 上一個結果 Shift+o 建立新行但是不插入 Ctrl+a 全選 2*(Shift+q) 快速不儲存 Ctrl+h 替換 (比如1,2s/set/get/g就是替換1到2行的set為get)
參考文獻
<a href="http://www.vimer.cn/">http://www.vimer.cn/</a>
<a href="http://qixinglu.com/archives/vim_key_mapping">http://qixinglu.com/archives/vim_key_mapping</a>
<a href="http://easwy.com/blog/archives/advanced-vim-skills-cscope/">http://easwy.com/blog/archives/advanced-vim-skills-cscope/</a>
<a href="http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx">http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx</a>
<a href="http://sinolog.it/?p=1443">http://sinolog.it/?p=1443</a>
下載下傳
除apt-get安裝外的所有已經配置好的vim設定打包如下,直接解壓到home目錄就可以直接使用了:
(注意,有systags比較大,大概1.5G,主要是我的include目錄裡有太多的東西,下載下傳後可以删除重新參照自動補全建立系統tags來自己生成)