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


 作者:gnuhpc 
出處:http://www.cnblogs.com/gnuhpc/

本文環境:ubuntu 10.10/vim7.2

前言:一年前寫過一篇關於VIM的C/C++編程環境的文字,一年中又接觸了很多東西,深入使用中發現其實還是需要有很多改正和增強的,當然,VIM社區中也出現了更多好用插件需要整合進來。為了更好的總結整個環境配置方法以及使用方法,特寫此文從零開始配置vim環境,主要針對C/C++/Python/Bash編程。

基本配置
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)安裝中文幫助手冊
這個看個人需要,下載地址:http://vimcdoc.sourceforge.net/

安裝:

$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下載安裝:

下載:http://www.vim.org/scripts/script.php?script_id=213

安裝:將下載的文件解壓放到~/.vim目錄中

Bash-support下載安裝:

下載:http://www.vim.org/scripts/download_script.php?src_id=16019

安裝:將下載文件解壓放到~/.vim目錄中

使用方法:

  • a)自動添加文件頭:
    添加你自己的信息: vim ~/.vim/c-support/templates/Templates
    ~/.vim/c-support/templates 這個目錄下還有許多模板,你可以自己定制。現在試着vim test.c看一看效果。
  • b)快捷輸入
    主要是一些模板的插入,種類幾乎覆蓋C/C++/Bash開發中大多數需要手動輸入的東西。不過我不是很喜歡它的默認模板的代碼風格,不過可以通過上述的目錄中的文件去定制。這個功能在后邊的code complete插件中也提供了。當然,也包含一些比如注釋等的操作。
  • 另外一部分是編譯運行的快捷鍵,還有一個把另一個文件內容直接灌入當前文件的功能。
  • 有關使用熱鍵的方法見一個文檔:http://lug.fh-swf.de/vim/vim-c/c-hotkeys.pdf(內容如下)
  • C
  • image_thumb1
  • imageimage_thumb2
  • Shell
  • image_thumb4image_thumb3

2.閱讀源代碼:Ctags+Tag List +Win Manger+Cscope

這三個分別是生成標簽、列出標簽(使用ctags)、列出文件、代碼跳轉。

下載安裝:

下載安裝Exuberant Ctags :sudo apt-get install exuberant-ctags 
(我們安裝ctags但是並不直接使用它作為代碼跳轉工具,而是使用cscope)

Teg List下載:http://www.vim.org/scripts/download_script.php?src_id=7701

安裝:解壓到home目錄下的.vim子目錄中。

WinManager(調整窗口布局)下載:http://www.vim.org/scripts/download_script.php?src_id=754

安裝:解壓到home目錄下的.vim子目錄中。

下載安裝cscope:sudo apt-get install cscope

配置:
進入$HOME/.vim/doc打開 Vim 運行 “:helptags .” 這是要保證taglist幫助可以正常使用。

然后為后邊配置自動補全建立系統tags:(具體為什么采用這樣的參數請參考ctags命令行幫助

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
endf

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

3.同名頭文件和源文件切換:A
下載安裝:http://www.vim.org/scripts/download_script.php?src_id=7218,將a.vim 放到 ~/.vim/plugin 中。

在.vimrc中添加:map <F11> :A<cr>

  • 使用: 在源文件或者頭文件中用F11就可以切換了。

4.代碼塊和常用語句模板自動補全:code_complete

下載安裝:http://www.vim.org/scripts/download_script.php?src_id=10778 ,放到 ~/.vim/plugin 中。

把插件文件中的tab都改為C-b防止與后來我們要安裝的supertab沖突。

另外,這個是基於ctags的,所以要生成或加載tags,參見2)部分。

將下邊這一段加入到template段中以添加bash模板補全功能

“Bash Templates
“Bash Structure by warmbupt@gmail.com
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

下載地址:
http://www.vim.org/scripts/download_script.php?src_id=16104
http://www.vim.org/scripts/download_script.php?src_id=16345

安裝:用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

下載安裝:http://www.vim.org/scripts/download_script.php?src_id=15953,然后放到plugin目錄里。

然后在.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

下載安裝:

http://www.vim.org/scripts/download_script.php?src_id=3666
http://www.vim.org/scripts/download_script.php?src_id=9160
http://www.vim.org/scripts/download_script.php?src_id=14576

解壓后將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

下載安裝:http://www.vim.org/scripts/download_script.php?src_id=9801,放到plugin目錄中。這個插件支持很多語言。

  • 使用:在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 %”
        exec “e! %”
    elseif &filetype == ‘py’
        exec “!astyle –style=gnu –suffix=none %”
        exec “e! %”
    elseif &filetype == ‘java’
        exec “!astyle –style=java –suffix=none %”
        exec “e! %”
    elseif &filetype == ‘jsp’
        exec “!astyle –style=gnu –suffix=none %”
        exec “e! %”
    elseif &filetype == ‘xml’
        exec “!astyle –style=gnu –suffix=none %”
        exec “e! %”
    elseif &filetype == ‘html’
        exec “!astyle –style=gnu –suffix=none %”
        exec “e! %”
    elseif &filetype == ‘htm’
        exec “!astyle –style=gnu –suffix=none %”
        exec “e! %”
    endif
endfunc
“結束定義FormartSrc

  • 使用:<F12> 進行代碼格式化。

10.多tab支持:NERD_tree

下載安裝:http://www.vim.org/scripts/download_script.php?src_id=11834,解壓到.vim目錄即可

設置:

“設置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

下載安裝:http://www.vim.org/scripts/download_script.php?src_id=11062 解壓放到~/.vim/after/ftplugin/ 路徑下

將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

下載安裝:pyflakes-vim.zip,在~/.vim/目錄下解壓。

  • 使用:當你的python腳本語法有問題時,自動會在出錯處標紅,並在屏幕下方顯示錯誤原因提示。

13. Python常用功能:python_fn.vim

下載安裝:python_fn.vim, 放到~/.vim/ftplugin/python中即可。

  • 使用:

image_thumb6

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

下載安裝:python_editing.vim,放在~/.vim/ftplugin/python即可。

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

15.代碼文檔化工具:Doxygen

下載安裝:DoxygenToolkit.vim,放到~/.vim/plugin

安裝doxygen:sudo apt-get install doxygen

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

map <F4>a :D oxAuthor<CR>
map <F4>f :D ox<CR>
map <F4>b :D oxBlock<CR>
map <F4>l :D oxLic<CR>
map <F4>c odocClass<C-B>
map <F4>m odocMember<C-B>
let g:DoxygenToolkit_authorName=”pchuang, http://blog.csdn.net”
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

使用:(需要安裝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 %<”
        exec “!.\/%<”
    elseif &filetype == ‘python’
        exec “!python %”
    endif
endfunc

func Debug()
    exec “w” 
    if &filetype == ‘c’ 
        exec “!rm %<”
        exec “!gcc % -g -o %<”
        exec “!gdb %<”
    elseif &filetype == ‘cpp’
        exec “!rm %<”
        exec “!g++ % -g -o %<”
        exec “!gdb %<”
        exec “!rm %<.class”
    elseif &filetype == ‘java’
        exec “!javac %”
        exec “!jdb %<”
    elseif &filetype == ‘python’
        exec “!pdb %”
    endif
endfunc

  • 使用:F8編譯運行程序,雙擊F8為調試程序

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

在.vimrc中配置:

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

  • 使用:在.sh文件編輯后自動被賦予執行權限。

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

在.vimrc中配置:

autocmd BufReadPost *
  \ if line(“‘\”") > 0 && line (“‘\”") <= line(“$”) |
  \   exe “normal g’\”" |
  \ endif

  • 使用:在退出一個文件編輯后再次進入時會自動跳轉到上次編輯的地方。

19.配置括號自動添加

在.vimrc中配置:

: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
    endif
endf

  • 使用:大中小圓括號的自動匹配添加。

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)

參考文獻

http://www.vimer.cn/
http://qixinglu.com/archives/vim_key_mapping
http://easwy.com/blog/archives/advanced-vim-skills-cscope/
http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx
http://sinolog.it/?p=1443

下載

除apt-get安裝外的所有已經配置好的vim設置打包如下,直接解壓到home目錄就可以直接使用了:

下載地址:http://www.kuaipan.cn/file/id_13675463633282823.html

(注意,有systags比較大,大概1.5G,主要是我的include目錄里有太多的東西,下載后可以刪除重新參照自動補全建立系統tags來自己生成


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM