vim開發環境配置

1、大飽眼福

  看了效果圖,確定有人說, 這都有啥功能?就花哨?php

  告訴你,你說花哨就錯了,開玩笑?咱們程序猿可都是實打實的人,說謊都不會,咋會忽悠人呢。java

  下面我來告訴你,這都有些什麼功能:c++

  • 文件索引功能,也就是能夠知道這個文件裏面有哪些函數,變量,宏定義,結構體,類等等
  • 文件目錄快速瀏覽,能夠經過目錄窗口來打開本身想要打開的文件,建立刪除目錄等功能
  • 自動補全文件功能,特別是include的時候,根據路徑自動補全,選擇你想要的文件
  • 自動補全類成員,函數,命名空間等
  • 語法高亮,提供類型關鍵字,函數等高亮,固然函數我以爲不必,因此沒設置
  • c/h文件隨意切換,當你在coding的時候,確定須要來回在.h/hpp和.c/cpp之間來回切換,沒問題,能夠的。
  • quickfix功能,編譯出錯,你確定想根據錯誤找到文件對應的地方修改吧,沒問題,能夠的。
  • 基本編輯功能不用說了

  下面咱們來講怎麼整合這些功能,有的是vim自帶的,有的是須要插件的。程序員

二.準備工做

1.準備文件/路徑

  確認文件/路徑是否存在,文中說的一些路徑, 好比:shell

  ~/.vim/plugin
  ~/.vim/doc
  ~/.vim/syntax

  若是沒有,請新建。編程

2.預約義

  文中說到的.vimrc文件都是指 ~/.vimrcvim

三.正式起航

1.vim編程經常使用命令

%    跳轉到配對的括號去
[[    跳轉到代碼塊的開頭去(但要求代碼塊中'{'必須單獨佔一行)
gD    跳轉到局部變量的定義處
''    跳轉到光標上次停靠的地方, 是兩個', 而不是一個"
mx    設置書籤,x只能是a-z的26個字母
`x    跳轉到書籤處("`"是1左邊的鍵)
>    增長縮進,"x>"表示增長如下x行的縮進
<    減小縮進,"x<"表示減小如下x行的縮進

2.語法高亮

  寫程序沒有語法高亮將是一件多麼痛苦的事情啊,一片黑,就像一直都在跑屍同樣,幸好vim 提供了語法高亮功能, 在上面的圖片中你們也能夠看到那些註釋, 關鍵字, 字符串等, 都用不一樣顏色顯示出來了, 要作到這樣, 首先要在你的 ~/.vimrc 文件中增長下面幾句話:瀏覽器

syntax enable
syntax on

  再從新啓動vim, 並打開一個c程序文件, 是否是以爲眼前忽然色彩繽紛了起來...
  若是你不喜歡這個配色方案你能夠選擇一個你滿意的配色方案, 而後在~/.vimrc文件中增長下面加上colorscheme xxx,如這句:緩存

colorscheme desert

  desert表示的就是一種配色方案, 在 vim.org 上跟你同樣的人不少, 他們作了各類各樣的顏色主題, 你能夠下載下來一個一個的試, 多地能夠看到你眼花. 若是這樣你還不滿意(你還真是XXXX), 不要緊, vim的做者早想到會有你這種人了, 你能夠建立你本身的顏色主題, 把下面的這篇文檔好好學習一些一下吧:函數

:help syntax.txt

  更炫的語法高亮:
  你可能會發現不少東西沒有高亮起來, 好比運算符號, 各類括號, 函數名, 自定義類型等

  主要的思路是新建一個語法文件, 在文件中定義你要高亮的東東, 想高亮什麼就高亮什麼, 用vim就是這麼自信. 所謂的語法文件就是vim用來高亮各類源文件的一個腳本, vim靠這個腳本的描述來使文件中的不一樣文本顯示不一樣的顏色, 好比C語言的語法文件放在相似於這樣的一個路徑中:
  /usr/share/vim/vim64/syntax/c.vim
  其餘語言的語法文件也能夠在這個路徑中找到, 你的也許不在這個路徑中, 無論它, 在你本身的HOME下新建一個語法文件, 新建一個空文件:
  ~/.vim/syntax/c.vim
  在其中加入

"========================================================
" Highlight All Function
"========================================================
syn match   cFunction "/<[a-zA-Z_][a-zA-Z_0-9]*/>[^()]*)("me=e-2
syn match   cFunction "/<[a-zA-Z_][a-zA-Z_0-9]*/>/s*("me=e-1
hi cFunction        gui=NONE guifg=#B5A1FF

"========================================================
" Highlight All Math Operator
"========================================================
" C math operators
syn match       cMathOperator     display "[-+/*/%=]"
" C pointer operators
syn match       cPointerOperator  display "->/|/."
" C logical   operators - boolean results
syn match       cLogicalOperator  display "[!<>]=/="
syn match       cLogicalOperator  display "=="
" C bit operators
syn match       cBinaryOperator   display "/(&/||/|/^/|<</|>>/)=/="
syn match       cBinaryOperator   display "/~"
syn match       cBinaryOperatorError display "/~="
" More C logical operators - highlight in preference to binary
syn match       cLogicalOperator  display "&&/|||"
syn match       cLogicalOperatorError display "/(&&/|||/)="

" Math Operator
hi cMathOperator            guifg=#3EFFE2
hi cPointerOperator         guifg=#3EFFE2
hi cLogicalOperator         guifg=#3EFFE2
hi cBinaryOperator          guifg=#3EFFE2
hi cBinaryOperatorError     guifg=#3EFFE2
hi cLogicalOperator         guifg=#3EFFE2
hi cLogicalOperatorError    guifg=#3EFFE2

  再打開你的C文件看看, 是否是又明亮了許多. 還有一個壓箱底的要告訴你, 若是你本身增長了一個類型或者結構之類的, 怎麼讓它也象"int", "void"這樣高亮起來呢? 再在上面的文件~/.vim/syntax/c.vim中添加下面的東東:

  這樣你本身的類型My_Type_1, My_Type_2, My_Type_3就也能夠向"int"同樣高亮起來了, 這樣的缺點是每增長一個類型, 就要手動在這裏添加一下

"========================================================
" My Own DataType
"========================================================
syn keyword cType       My_Type_1 My_Type_2 My_Type_3

3.Ctags

  Ctags讓你在程序中跳來跳去,簡直就是寶貝同樣的東西,Linux內核源碼都提供了"make tags"這個選項,下面讓咱們來了解tags這個文件。

  tags文件是由ctags程序產生的一個索引文件, ctags程序其是叫"Exuberant Ctags", 是Unix上面ctags程序的替代品, 而且比它功能強大, 是大多數Linux發行版上默認的ctags程序. 那麼tags文件是作什麼用的呢? 若是你在讀程序時看了一個函數調用, 或者一個變量, 或者一個宏等等, 你想知道它們的定義在哪兒, 怎麼辦呢? 用grep? 那會搜出不少不相干的地方. 如今流行用是的<C-]>, 誰用誰知道呀, 當光標在某個函數或變量上時, 按下"Ctrl+]", 光標會自動跳轉到其定義處, 夠厲害吧, 你不用再羨慕Visual Studio的程序員了,爽翻天~

  你如今先別急着去按<C-]>,由於電腦默認是沒ctags程序的,須要你本身去安裝,ctags的網站是http://ctags.sourceforge.net,須要在上面手動下載,而後安裝,我下的是5.8版本,那就以5.8爲例:

$tar -xzvf ctags-5.8.tar.gz

$cd ctags-5.8

$./configure

$make

$make install //須要root權限

  而後去你的源碼目錄, 若是你的源碼是多層的目錄, 就去最上層的目錄, 在該目錄下運行命令: ctags -R,如:

$cd /home/styuan/ctags-5.8

$ctags -R

  此時在/home/styuan/ctags-5.8目錄下會生成一個 tags 文件, 如今用vim打開/home/styuan/ctags-5.8/main.c

$ vim /home/styuan/ctags-5.8/main.c

  再在vim中運行命令:

:set tags=/home/styuan/ctags-5.8/tags

  該命令將tags文件加入到vim中來, 你也能夠將這句話放到~/.vimrc中去, 若是你常常在這個工程編程的話.
  下面要開始真刀實槍的開幹了, 以下圖, 將光標放在createTagsForEntry()函數上

  此時按下<C-]>, 光標會自動跳到createTagsForEntry()函數的定義處, 見下圖:

  若是此時你還想再跳回剛纔的位置, 你還能夠按<C-T>, 這樣又跳回到createTagsForEntry()函數被調用的地方了, 變量, 結構, 宏, 等等, 均可以的, 趕快試試吧.....

  不過還有一個小瑕疵, 你修改程序後, 好比增長了函數定義, 刪除了變量定義, tags文件不能自動rebuild, 你必須手動再運行一下命令:

$ ctags -R

4.TagList,高效閱讀代碼

  下載地址http://sourceforge.net/projects/vim-taglist/files/vim-taglist/

  解壓taglist_45.zip,能夠看到有兩個目錄doc和plugin,結構以下

taglist_45
|
|-------- doc
| \-------- taglist.txt
|
\-------- plugin
\---------- taglist.vim

  執行下列shell命令,即安裝完成

cp  doc/taglist.txt     ~/.vim/doc/
cp  plugin/taglist.vim  ~/.vim/plugin/

  使用方法:

  在源碼目錄下,執行ctags -R對各目錄遞歸建立生成tags文件

  用Vim打開源碼文件,以命令模式執行Tlist,便可啓用Taglist插件,<F1>能夠查看taglist的幫助信息

  同時在.vimrc中配置taglist

"
" taglist
"
let Tlist_Show_One_File=1    "只顯示當前文件的tags
let Tlist_WinWidth=40        "設置taglist寬度
let Tlist_Exit_OnlyWindow=1  "tagList窗口是最後一個窗口,則退出Vim
let Tlist_Use_Right_Window=1 "在Vim窗口右側顯示taglist窗口

5.WinManager 文件瀏覽器和窗口管理器

  下載地址:http://www.vim.org/scripts/script.php?script_id=95

  解壓後獲得兩個文件夾plugin和doc,將他們拷貝到~/.vim下面的相應目錄,如taglist的安裝

  修改.vimrc文件

"winmanager設置
"整合taglist窗口
let g:winManagerWindowLayout = 'FileExplorer|TagList'
"設置快捷鍵,wm呼出
nmap wm :WMToggle<cr>

  在vim中使用wm鍵便可呼出窗口,上面的例子中已經在使用了,其中左上角爲winmanager窗口,左下角爲taglist窗口。

6.QuickFix 窗口

  在第一張圖中有quickfix窗口,在make的時候,可能會出現錯誤,而且讓錯誤定位到相應文件,這就須要quickfix出場了,例如故意在xxx.c中每一行加一個逗號,而後

  :make

  顯然編譯會報不少錯誤, 當編譯結束並退出到源碼界面時, 剛纔編譯器報的錯誤都已經看不到了, 可是咱們能夠用QuickFix窗口再將錯誤信息找出來, 用下面的命令調出QuickFix窗口:

  :cw

  當光標移動到相應的位置,按回車,還會跳到錯誤文件對應的地方哦,是否是很爽~同時還能夠跳轉:

:cn        // 切換到下一個結果
:cp        // 切換到上一個結果

7.c/h文件間相互切換

  做爲一個C程序員, 平常Coding時在源文件與頭文件間進行切換是再日常不過的事了, 直接用vim打開其源/頭文件其實也不是什麼麻煩事, 可是隻用一個按鍵就切換過來了, 這是多麼貼心的功能啊....

  插件名:A

  下載地址:http://www.vim.org/scripts/script.php?script_id=31

  下載好了以後,將a.vim放到 ~/.vim/plugin 文件夾中就至關於安裝好了

:A     在新Buffer中切換到c/h文件
:AS    橫向分割窗口並打開c/h文件
:AV    縱向分割窗口並打開c/h文件
:AT    新建一個標籤頁並打開c/h文件

8.自動補全之AutoComplPop

  AutoComplPop支持代碼(普通變量函數)的自動彈出

  下載地址:http://www.vim.org/scripts/script.php?script_id=1879 

  同其餘腳本插件的安裝方法一致,將解壓後的文件拷貝到~/.vim/ 下的相應目錄裏:

  autoload/*     ->    ~/.vim/autoload/

  doc/*            ->    ~/.vim/doc/

  plugin/*        ->    ~/.vim/plugin/

  從新打開vim便可使用。添加help文件:helptags ~/.vim/doc/便可(打開幫助文件:h(elp) autocomplpop)效果圖以下:

  9.c++代碼的自動補全

  插件:OmniCppComplete,支持類的 . , ->, :: 操做符的自動補全

  下載地址:http://www.vim.org/scripts/script.php?script_id=1520

  同其餘腳本插件的安裝方法一致,將解壓後的文件拷貝到~/.vim/ 下的相應目錄裏:

  autoload/*     ->    ~/.vim/autoload/

  doc/*            ->    ~/.vim/doc/

  after/*          ->    ~/.vim/after/

  同時在.vimrc中增長相應配置

"omnicppcomplete配置
filetype plugin indent on
set completeopt=menu,menuone
"打開.提示
let OmniCpp_MayCompleteDot=1
"打開->提示
let OmniCpp_MayCompleteArrow=1
"打開::提示
let OmniCpp_MayCompleteScope=1
"打開namespace
let OmniCpp_NamespaceSearch=1
"打開全局搜索
let OmniCpp_GlobalScopeSearch=1
"默認命名空間爲std
let OmniCpp_DefaultNamespace=["std"] 
"打開函數提示function
let OmniCpp_ShowPrototypeInAbbr=1
"自動定位到第二個
let OmniCpp_SelectFirstItem = 2 
"設置生成std tag的快捷鍵爲tag
map tag :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q <CR>

  當在vim中敲tag後會生成相應的tags,而後set tags=xxx.tags便可。

  注:ctags -R --c++-kinds=+p --fields=+iaS --extra=+q表示生成tags,是一個shell命令,因此綁定按鍵的時候要使用map tag :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q <CR>,表示在vim中按下tag命令,執行相應shell命令,以後一樣須要設置tags:set tags=xxx.tags,若是以爲每次設置不方便,而且經常使用目錄不會改變,也能夠寫在.vimrc

  set tags+=/home/xxx/tags

10.其餘設置

"設置行號
set number

"自動縮進
set autoindent
set cindent

"縮進寬度設置
set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
"set noexpandtab

"對齊風格
set cino=g0,:0

   OK,大功告成,固然,整合以後,窗口比較多,因此附上vim經常使用窗口操做

 4、vim多窗口使用技巧

一、打開多個窗口

  打開多個窗口的命令如下幾個:
  橫向切割窗口
  :new+窗口名(保存後就是文件名) 
  :split+窗口名,也能夠簡寫爲:sp+窗口名
  縱向切割窗口名
  :vsplit+窗口名,也能夠簡寫爲:vsp+窗口名

二、關閉多窗口

  能夠用:q!,也可使用:close,最後一個窗口不能使用close關閉。使用close只是暫時關閉窗口,其內容還在緩存中,只有使用q!、w!或x才能真能退出。
  :tabc 關閉當前窗口
  :tabo 關閉全部窗口

三、窗口切換

  :ctrl+w+j/k,經過j/k能夠上下切換,或者:ctrl+w加上下左右鍵,還能夠經過快速雙擊ctrl+w依次切換窗口。

四、窗口大小調整

  縱向調整
  :ctrl+w + 縱向擴大(行數增長)
  :ctrl+w - 縱向縮小 (行數減小)
  :res(ize) num  例如::res 5,顯示行數調整爲5行
  :res(ize)+num 把當前窗口高度增長num行
  :res(ize)-num 把當前窗口高度減小num行
  橫向調整
  :vertical res(ize) num 指定當前窗口爲num列
  :vertical res(ize)+num 把當前窗口增長num列
  :vertical res(ize)-num 把當前窗口減小num列

五、給窗口重命名

  :f file

六、vi打開多文件

  vi a b c
  :n 跳至下一個文件,也能夠直接指定要跳的文件,如:n c,能夠直接跳到c文件
  :e# 回到剛纔編輯的文件

七、文件瀏覽

  :Ex 開啓目錄瀏覽器,能夠瀏覽當前目錄下的全部文件,並能夠選擇
  :Sex 水平分割當前窗口,並在一個窗口中開啓目錄瀏覽器
  :ls 顯示當前buffer狀況

八、vi與shell切換

  :shell 能夠在不關閉vi的狀況下切換到shell命令行  :exit 從shell回到vi

相關文章
相關標籤/搜索