vim開發環境配置


一、大飽眼福

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

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

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

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

  下面我們來說怎么整合這些功能,有的是vim自帶的,有的是需要插件的。

二.准備工作

1.准備文件/路徑

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

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

  如果沒有,請新建。

2.預定義

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

三.正式起航

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常用窗口操作

 四、vim多窗口使用技巧

1、打開多個窗口

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

2、關閉多窗口

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

3、窗口切換

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

4、窗口大小調整

  縱向調整
  :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列

5、給窗口重命名

  :f file

6、vi打開多文件

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

7、文件瀏覽

  :Ex 開啟目錄瀏覽器,可以瀏覽當前目錄下的所有文件,並可以選擇
  :Sex 水平分割當前窗口,並在一個窗口中開啟目錄瀏覽器
  :ls 顯示當前buffer情況

8、vi與shell切換

  :shell 可以在不關閉vi的情況下切換到shell命令行
  :exit 從shell回到vi


免責聲明!

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



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