看了效果圖,確定有人說, 這都有啥功能?就花哨?php
告訴你,你說花哨就錯了,開玩笑?咱們程序猿可都是實打實的人,說謊都不會,咋會忽悠人呢。java
下面我來告訴你,這都有些什麼功能:c++
下面咱們來講怎麼整合這些功能,有的是vim自帶的,有的是須要插件的。程序員
確認文件/路徑是否存在,文中說的一些路徑, 好比:shell
~/.vim/plugin ~/.vim/doc ~/.vim/syntax
若是沒有,請新建。編程
文中說到的.vimrc文件都是指 ~/.vimrcvim
% 跳轉到配對的括號去 [[ 跳轉到代碼塊的開頭去(但要求代碼塊中'{'必須單獨佔一行) gD 跳轉到局部變量的定義處 '' 跳轉到光標上次停靠的地方, 是兩個', 而不是一個" mx 設置書籤,x只能是a-z的26個字母 `x 跳轉到書籤處("`"是1左邊的鍵) > 增長縮進,"x>"表示增長如下x行的縮進 < 減小縮進,"x<"表示減小如下x行的縮進
寫程序沒有語法高亮將是一件多麼痛苦的事情啊,一片黑,就像一直都在跑屍同樣,幸好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
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
下載地址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窗口
下載地址: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窗口。
在第一張圖中有quickfix窗口,在make的時候,可能會出現錯誤,而且讓錯誤定位到相應文件,這就須要quickfix出場了,例如故意在xxx.c中每一行加一個逗號,而後
:make
顯然編譯會報不少錯誤, 當編譯結束並退出到源碼界面時, 剛纔編譯器報的錯誤都已經看不到了, 可是咱們能夠用QuickFix窗口再將錯誤信息找出來, 用下面的命令調出QuickFix窗口:
:cw
當光標移動到相應的位置,按回車,還會跳到錯誤文件對應的地方哦,是否是很爽~同時還能夠跳轉:
:cn // 切換到下一個結果 :cp // 切換到上一個結果
做爲一個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)效果圖以下:
插件: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
"設置行號 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經常使用窗口操做
打開多個窗口的命令如下幾個:
橫向切割窗口
: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 a b c
:n 跳至下一個文件,也能夠直接指定要跳的文件,如:n c,能夠直接跳到c文件
:e# 回到剛纔編輯的文件
:Ex 開啓目錄瀏覽器,能夠瀏覽當前目錄下的全部文件,並能夠選擇
:Sex 水平分割當前窗口,並在一個窗口中開啓目錄瀏覽器
:ls 顯示當前buffer狀況
:shell 能夠在不關閉vi的狀況下切換到shell命令行 :exit 從shell回到vi