天天看點

【Linux開發技術之工具使用】配置VIM下程式設計和代碼閱讀環境

本文環境: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)快捷輸入

【Linux開發技術之工具使用】配置VIM下程式設計和代碼閱讀環境
【Linux開發技術之工具使用】配置VIM下程式設計和代碼閱讀環境

Shell

【Linux開發技術之工具使用】配置VIM下程式設計和代碼閱讀環境

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操作:

【Linux開發技術之工具使用】配置VIM下程式設計和代碼閱讀環境

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=’&lt;C-n&gt;’ let g:EchoFuncKeyPrev=’&lt;C-p&gt;’

使用:可以試着輸入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 &lt;Shift-V&gt; 模式下,ctrl-c注釋,ctrl-x去注釋。

9.代碼格式整理:astyle

下載下傳安裝:$sudo apt-get install astyle

在vimrc中寫入:

“定義源代碼格式化 map &lt;F12&gt; :call FormartSrc()&lt;CR&gt; “定義FormartSrc() func FormartSrc()     exec “w”     if &amp;filetype == ‘c’         exec “!astyle % –style=ansi –suffix=none %”         exec “e! %”     elseif &amp;filetype == ‘cpp’         “exec “!astyle % –style=ansi –suffix=none %”         “exec “e! %”     elseif &amp;filetype == ‘perl’         exec “!astyle –style=gnu –suffix=none %”     elseif &amp;filetype == ‘py’     elseif &amp;filetype == ‘java’         exec “!astyle –style=java –suffix=none %”     elseif &amp;filetype == ‘jsp’     elseif &amp;filetype == ‘xml’     elseif &amp;filetype == ‘html’     elseif &amp;filetype == ‘htm’ endfunc “結束定義FormartSrc

使用:&lt;F12&gt; 進行代碼格式化。

10.多tab支援:NERD_tree

“設定tab的快捷鍵 “Shift+t為建立一個标簽,按兩次Shirt+t為跳轉标簽 map &lt;S-t&gt; :tabnew .&lt;CR&gt; map &lt;S-t&gt;&lt;S-t&gt; &lt;ESC&gt;:tabnext&lt;CR&gt;

使用: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

【Linux開發技術之工具使用】配置VIM下程式設計和代碼閱讀環境

14. Python代碼自動折疊:Efficient python folding

使用:f為折疊起來,F(Shift-f)是打開已經折疊的代碼。

15.代碼文檔化工具:Doxygen

安裝doxygen:sudo apt-get install doxygen

配置:.vimrc中添加,其中個人資訊可以自己修改

map &lt;F4&gt;a
【Linux開發技術之工具使用】配置VIM下程式設計和代碼閱讀環境
oxAuthor&lt;CR&gt; map &lt;F4&gt;f
【Linux開發技術之工具使用】配置VIM下程式設計和代碼閱讀環境
ox&lt;CR&gt; map &lt;F4&gt;b
【Linux開發技術之工具使用】配置VIM下程式設計和代碼閱讀環境
oxBlock&lt;CR&gt; map &lt;F4&gt;l
【Linux開發技術之工具使用】配置VIM下程式設計和代碼閱讀環境
oxLic&lt;CR&gt; map &lt;F4&gt;c odocClass&lt;C-B&gt; map &lt;F4&gt;m odocMember&lt;C-B&gt; let s:licenseTag = “Copyright(C)\&lt;enter&gt;” let s:licenseTag = s:licenseTag . “For free\&lt;enter&gt;” let s:licenseTag = s:licenseTag . “All right reserved\&lt;enter&gt;” let g:DoxygenToolkit_licenseTag = s:licenseTag let g:DoxygenToolkit_briefTag_funcName=”yes” let g:doxygen_enhanced_color=1

使用:(需要安裝doxygen)

F4-a 檔案頭注釋 F4-f  函數頭注釋 F4-b 程式塊注釋 F4-l license塊注釋 F4-c 類注釋 F4-m 類成員注釋

16.配置一鍵編譯調試

在.vimrc中設定:

map &lt;F8&gt; :w&lt;CR&gt;:call CompileRun()&lt;CR&gt; map &lt;F8&gt;&lt;F8&gt; :w&lt;CR&gt;:call Debug()&lt;CR&gt; func CompileRun()     exec “w”      if &amp;filetype == ‘c’          exec “!gcc % -g -o %&lt;”         exec “!.\/%&lt;”     elseif &amp;filetype ==’cpp’         exec “!g++ % -g -o %&lt;”     elseif &amp;filetype == ‘python’         exec “!python %” func Debug()         exec “!rm %&lt;”         exec “!gdb %&lt;”         exec “!rm %&lt;.class”         exec “!javac %”         exec “!jdb %&lt;”         exec “!pdb %”

使用:F8編譯運作程式,輕按兩下F8為調試程式

17.shell腳本自動加上執行權限

在.vimrc中配置:

function ModeChange()   if getline(1) =~ “^#!”     if getline(1) =~ “/bin/”         silent !chmod a+x &lt;afile&gt;   endif endfunction au BufWritePost * call ModeChange()

使用:在.sh檔案編輯後自動被賦予執行權限。

18.從上次退出時編輯的位置繼續編輯

autocmd BufReadPost *   \ if line(“‘\”") &gt; 0 &amp;&amp; line (“‘\”") &lt;= line(“$”) |   \   exe “normal g’\”" |   \ endif

使用:在退出一個檔案編輯後再次進入時會自動跳轉到上次編輯的地方。

19.配置括号自動添加

:inoremap ( ()&lt;ESC&gt;i :inoremap ) &lt;c-r&gt;=ClosePair(‘)’)&lt;CR&gt; :inoremap { {}&lt;ESC&gt;i :inoremap } &lt;c-r&gt;=ClosePair(‘}’)&lt;CR&gt; :inoremap [ []&lt;ESC&gt;i :inoremap ] &lt;c-r&gt;=ClosePair(‘]’)&lt;CR&gt; :inoremap &lt; &lt;&gt;&lt;ESC&gt;i :inoremap &gt; &lt;c-r&gt;=ClosePair(‘&gt;’)&lt;CR&gt; function ClosePair(char)     if getline(‘.’)[col('.') - 1] == a:char         return “\&lt;Right&gt;”     else         return a:char

使用:大中小圓括号的自動比對添加。

20.添加一些快捷鍵:

在.vimrc中添加:

map &lt;F5&gt; :w&lt;CR&gt;:make&lt;CR&gt; map &lt;F5&gt;&lt;F5&gt; :make clean&lt;CR&gt; map &lt;F6&gt; :cw&lt;CR&gt; map &lt;F6&gt;&lt;F6&gt; :ccl&lt;CR&gt; map &lt;F7&gt; :cn&lt;CR&gt; map &lt;F7&gt;&lt;F7&gt; :cp&lt;CR&gt; map &lt;S-o&gt; o&lt;ESC&gt;&lt;CR&gt;  map &lt;C-a&gt; ggVG map &lt;S-q&gt;&lt;S-q&gt; :q!&lt;CR&gt;:q!&lt;CR&gt;:q!&lt;CR&gt;  map &lt;C-H&gt; :L1,L2s/src/tar/g map &lt;S-F12&gt; &lt;ESC&gt;I//&lt;ESC&gt;&lt;CR&gt; map! &lt;S-F12&gt; &lt;ESC&gt;I//&lt;ESC&gt;&lt;CR&gt; map &lt;S-F12&gt;&lt;S-F12&gt; 02x&lt;ESC&gt;&lt;CR&gt; map! &lt;S-F12&gt;&lt;S-F12&gt; &lt;ESC&gt;02x&lt;ESC&gt;&lt;CR&gt; map &lt;F12&gt; &lt;ESC&gt;$a//  map! &lt;F12&gt; &lt;ESC&gt;$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來自己生成)