.vimrc編寫指南

原文地址:http://edyfox.codecarver.org/html/_vimrc_for_beginners.html

VIM 中可供用戶定製的選項非常非常多,作爲初學者,我們沒有必要了解這麼多東西。下面,滇狐簡單列出了一些最常用的配置項,大家可以根據自己的需要將這些內容添加到自己的 .vimrc 中。

1 基本設置

  • set nocp 
    該命令指定讓 VIM 工作在不兼容模式下。在 VIM 之前,出現過一個非常流行的編輯器叫 vi。VIM 許多操作與 vi 很相似,但也有許多操作與 vi 是不一樣的。如果使用“:set cp”命令打開了兼容模式開關的話,VIM 將盡可能地模仿 vi 的操作模式。 
    也許有許多人喜歡“最正統的 vi”的操作模式,對於初學者來說,vi 裏許多操作是比較不方便的。 
    舉一個例子,VIM 裏允許在 Insert 模式下使用方向鍵移動光標,而 vi 裏在 Insert 模式下是不能移動光標的,必須使用 ESC 退回到 Normal 模式下才行。 
    再舉一個例子,vi 裏使用 u 命令可以撤消一次先前的操作,再次按下 u 時,將撤消“撤消”這個動作本身,也就是我們常說的“重複”(redo)。而 VIM 裏可以使用 u 命令撤消多步操作,“重複”使用的快捷鍵是 Ctrl + R。 
    使用兼容模式後,VIM 將放棄這些新的功能,儘量模仿 vi 的各種操作方式。只有在不兼容模式下,才能更好地發揮 VIM 自身的特點。Bram 爺爺強烈推薦大家使用 VIM 的不兼容模式,滇狐也是這樣推薦的。請務必在你的 .vimrc 中的第一行寫上:“set nocp”。
  • set ru 
    該命令打開 VIM 的狀態欄標尺。默認情況下,VIM 的狀態欄標尺在屏幕底部,它能即時顯示當前光標所在位置在文件中的行號、列號,以及對應的整個文件的百分比。打開標尺可以給文件的編輯工作帶來一定方便。
  • set hls 
    搜索時高亮顯示被找到的文本。該指令的功能在 vimtutor 中已經有過介紹,這裏就不多說了。其實似乎許多人並不喜歡這個功能。
  • set is 
    搜索時在未完全輸入完畢要檢索的文本時就開始檢索。vimtutor 對該命令也有過介紹,滇狐並不喜歡這個功能,因此滇狐自己的配置文件裏是沒有這條命令的。但是周圍有朋友很喜歡這個,因此滇狐還是將它列在這裏。
  • syntax on 
    打開關鍵字上色。進行程序設計的朋友應該都知道關鍵字上色是什麼東西,因此這裏就不多說了。不進行程序設計的朋友不妨也打開這個功能,雖然不一定能夠用得着,但這個功能其實也是很好玩的。
  • set backspace=indent,eol,start 
    設想這樣一個情況:當前光標前面有若干字母,我們按下 i 鍵進入了 Insert 模式,然後輸入了 3 個字母,再按 5 下刪除(Backspace)。默認情況下,VIM 僅能刪除我們新輸入的 3 個字母,然後喇叭“嘟嘟”響兩聲。如果我們“set backspace=start”,則可以在刪除了新輸入的 3 個字母之後,繼續向前刪除原有的兩個字符。 
    再設想一個情況:有若干行文字,我們把光標移到中間某一行的行首,按 i 鍵進入 Insert 模式,然後按一下 Backspace。默認情況下,喇叭會“嘟”一聲,然後沒有任何動靜。如果我們“set backspace=eol”,則可以刪除前一行行末的回車,也就是說將兩行拼接起來。 
    當我們設置了自動縮進後,如果前一行縮進了一定距離,按下回車後,下一行也會保持相同的縮進。默認情況下,我們不能在 Insert 模式下直接按 Backspace 刪除行首的縮進。如果我們“set backspace=indent”,則可以開啓這一項功能。 
    上述三項功能,你可以根據自己的需要,選擇其中一種或幾種,用逗號分隔各個選項。建議把這三個選項都選上。
  • set whichwrap=b,s,<,>,[,] 
    默認情況下,在 VIM 中當光標移到一行最左邊的時候,我們繼續按左鍵,光標不能回到上一行的最右邊。同樣地,光標到了一行最右邊的時候,我們不能通過繼續按右跳到下一行的最左邊。但是,通過設置 whichwrap 我們可以對一部分按鍵開啓這項功能。如果想對某一個或幾個按鍵開啓到頭後自動折向下一行的功能,可以把需要開啓的鍵的代號寫到 whichwrap 的參數列表中,各個鍵之間使用逗號分隔。以下是 whichwrap 支持的按鍵名稱列表:

    • 在 Normal 或 Visual 模式下按刪除(Backspace)鍵。

    • 在 Normal 或 Visual 模式下按空格鍵。

    • 在 Normal 或 Visual 模式下按 h 鍵。

    • 在 Normal 或 Visual 模式下按 l 鍵。

    • 在 Normal 或 Visual 模式下按左方向鍵。

    • 在 Normal 或 Visual 模式下按右方向鍵。

    • 在 Normal 模式下按 ~ 鍵(翻轉當前字母大小寫)。

    • 在 Insert 或 Replace 模式下按左方向鍵。

    • 在 Insert 或 Replace 模式下按右方向鍵。
  • set encoding=utf-8 
    設置當前字符編碼爲 UTF-8。UTF-8 是支持字符集最多的編碼之一,在 UTF-8 下進行工作,會帶來許多方便之處。由於 VIM 在運行過程中切換 encoding 會造成許多問題,如提示信息亂碼、register 丟失等,因此強烈建議大家在啓動 VIM 的時候把 encoding 設置爲 UTF-8,在編輯非 UTF-8 的文件時,通過 fileencoding 來進行轉碼。
  • set langmenu=zh_CN.UTF-8 
    使用中文菜單,並使用 UTF-8 編碼。如果沒有這句的話,在非 UTF-8 的系統,如 Windows 下,用了 UTF-8 的 encoding 後菜單會亂碼。
  • language message zh_CN.UTF-8 
    使用中文提示信息,並使用 UTF-8 編碼。如果沒有這句的話,在非 UTF-8 的系統,如 Windows 下,用了 UTF-8 的 encoding 後系統提示會亂碼。
  • set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1 
    設置編碼的自動識別。關於這條設置的詳細含義,請參看這篇文章
  • set ambiwidth=double 
    防止特殊符號無法正常顯示。在 Unicode 中,許多來自不同語言的字符,如果字型足夠近似的話,會把它們放在同一個編碼中。但在不同編碼中,字符的寬度是不一樣的。例如中文漢語拼音中的 ā 就很寬,而歐洲語言中同樣的字符就很窄。當 VIM 工作在 Unicode 狀態時,遇到這些寬度不明的字符時,默認使用窄字符,這會導致中文的破折號“——”非常短,五角星“★”等符號只能顯示一半。因此,我們需要設置 ambiwidth=double 來解決這個問題。
  • filetype plugin indent on 
    開啓文件類型自動識別,啓用文件類型插件,啓用針對文件類型的自動縮進。

2 文本編輯設置

  • set sw=4 
    自動縮進的時候,縮進尺寸爲 4 個空格。
  • set ts=4 
    Tab 寬度爲 4 個字符。
  • set et 
    編輯時將所有 Tab 替換爲空格。 
    該選項只在編輯時將 Tab 替換爲空格,如果打開一個已經存在的文件,並不會將已有的 Tab 替換爲空格。如果希望進行這樣的替換的話,可以使用這條命令“:retab”。
  • set smarttab 
    當使用 et 將 Tab 替換爲空格之後,按下一個 Tab 鍵就能插入 4 個空格,但要想刪除這 4 個空格,就得按 4 下 Backspace,很不方便。設置 smarttab 之後,就可以只按一下 Backspace 就刪除 4 個空格了。
  • set spell 
    打開拼寫檢查。拼寫有錯的單詞下方會有紅色波浪線,將光標放在單詞上,按 z= 就會出現拼寫建議,按 ]s 可以直接跳到下一個拼寫錯誤處。

3 斷行設置

  • set tw=78 
    設置光標超過 78 列的時候折行。
  • set lbr 
    不在單詞中間斷行。設置了這個選項後,如果一行文字非常長,無法在一行內顯示完的話,它會在單詞與單詞間的空白處斷開,儘量不會把一個單詞分成兩截放在兩個不同的行裏。
  • set fo+=mB 
    打開斷行模塊對亞洲語言支持。m 表示允許在兩個漢字之間斷行,即使漢字之間沒有出現空格。B 表示將兩行合併爲一行的時候,漢字與漢字之間不要補空格。該命令支持的更多的選項請參看用戶手冊。

4 C/C++ 編碼設置

  • set sm 
    顯示括號配對情況。打開這個選項後,當輸入後括號(包括小括號、中括號、大括號) 的時候,光標會跳回前括號片刻,然後跳回來,以此顯示括號的配對情況。
  • set cin 
    打開 C/C++ 風格的自動縮進。打開了自動縮進後,在編碼的時候我們可以使用“V”命令選中一段文本後,按“=”將這段文本重新調整縮進格式,在一定程度上起到代碼美化的作用。 
    另外,打開了自動縮進後,在使用 TERM 下的 vim 的時,粘貼代碼時常常會出現版式混亂的現象。那是因爲 TERM 並不知道你現在正在粘貼代碼,它直接“粘貼”動作向 vim 解釋爲鍵入,因此 vim 便按照設置的自動縮進格式爲你的代碼調整了縮進。不幸的是,粘貼進去的代碼中本身已經包含了縮進,因此便出現了版式混亂的情況。在 gvim 中就不會出現這個問題,因爲它能夠知道你現在正在粘貼。 
    知道了這個症狀的來由,解決方案也就顯而易見了:在粘貼的時候把所有自動縮進都關閉,粘貼完畢之後再打開。一個個手工關閉自動縮進未免過於繁瑣,vim 爲我們提供了一個很好用的命令,只要輸入“:set paste”,就可以關閉所有自動縮進。粘貼完畢後再輸入“:set nopaste”就可以重新打開原有的自動縮進設置了。
  • set cino=:0g0t0(sus 
    設定 C/C++ 風格自動縮進的選項,這裏簡要介紹一下這段代碼裏用到的選項的含義,cino 支持的選項還很多,更多選項請看用戶手冊。
// :0
//
// switch 語句之下的 case 語句縮進 0 個空格,也就是說不縮進,與 switch 塊平
// 齊,使用這樣風格:
switch (x)
{
case 1:
    a = b;
    break;
default:
}

// g0
//
// class、struct 等之下的訪問權限控制語句,如 public、protected、private 等,
// 相對 class、struct 等所在的塊縮進 0 個空格,與 class 等塊平齊,使用這樣的
// 風格:
class foo
{
public:
    int a;
private:
    int b;
};

// t0
//
// 如果函數返回值與函數名不在同一行,則返回值縮進 0 個空格,也就是說不縮進,如
// 下所示:

// set cino=t4
    int
func1()
{
}

// set cino=t0
int
func()
{
}

// (sus
//
// 當一對括號跨越多行時,其後的行縮進前面 sw 指定的距離,效果如下:
int a = (1 + 2 + 3
    + 4 + 5 + 6
    + 7 + 8) * 9;
  • set ai 
    打開普通文件類型的自動縮進。該自動縮進不如 cindent 智能,但它可以爲你編輯非 C/C++ 文件提供一定幫助。

5 其它設置

  • set selectmode= 
    不使用 selectmode。
  • set keymodel= 
    不使用“Shift + 方向鍵”選擇文本,“Shift + 方向鍵”代表向指定方向跳一個單詞。如果你喜歡這項功能的話,可以使用“set keymodel=startsel,stopsel”打開它。
  • set selection=inclusive 
    指定在選擇文本時,光標所在位置也屬於被選中的範圍。如果指定 selection=exclusive 的話,可能會出現某些文本無法被選中的情況。
  • set wildmenu 
    在命令模式下使用 Tab 自動補全的時候,將補全內容使用一個漂亮的單行菜單形式顯示出來。
  • colo torte 
    選擇 torte 配色方案。VIM 裏內置了許多關鍵字上色的配色方案,另外你還可以到網上下載更多配色方案,或是自己編寫。點擊“編輯”→“調色板”,就能列出所有支持的配色方案。你可以把“調色板”子菜單剪下來,然後慢慢選擇,挑出一個你最喜歡的配色方案來。

6 圖形界面設置

  • set nowrap 
    指定不折行。如果一行太長,超過屏幕寬度,則向右邊延伸到屏幕外面。如果使用圖形界面的話,指定不折行視覺效果會好得多。
  • set mousemodel=popup 
    當右鍵單擊窗口的時候,彈出快捷菜單。
  • set guioptions+=b 
    添加水平滾動條。如果你指定了不折行,那爲窗口添加一個水平滾動條就非常有必要了。
  • set guifont=Bitstream\ Vera\ Sans\ Mono\ 9 
    設置圖形界面下的字體。你可以點“編輯”→“選擇字體”,然後在對話框中選出你喜歡的字體與字號,選擇完畢後,先按幾下 ESC 確認處在 Normal 模式下,然後輸入這條命令:“:set guifont?”回車後 gvim 屏幕最下方會顯示出你當前所用的字體的名稱與字號。將獲得的結果寫到配置文件裏面就可以了,需要注意一點,如果字體名稱裏面含有空格的話,在抄的時候需要在所有空格前面加一個斜槓。

7 條件選擇

同一個配色方案,在 gvim 下和字符界面的 vim 下效果大相徑庭,滇狐個人的習慣是,在 gvim 下使用 torte 配色方案,在 vim 下使用 ron 配色方案。因此我們有必要針對 gvim 和 vim 進行不同的設置。

另外,前面我們在 gvim 下不使用折行,開啓水平滾動條,但在 vim 下,是沒有滾動條可用的,因此還是有必要爲 vim 保留自動折行。

條件選擇設置的格式如下:

if (has("gui_running"))
" 圖形界面下的設置
    set nowrap
    set guioptions+=b
    colo torte
else
" 字符界面下的設置
    set wrap
    colo ron
endif

8 示例配置文件

下面給出一個滇狐推薦的初學者專用 (G)Vim 配置文件,裏面沒有太多個性化的設置,方便大家進一步擴展:

set nocp

" Tab related
set ts=4
set sw=4
set smarttab
set et
set ambiwidth=double

" Format related
set tw=78
set lbr
set fo+=mB

" Indent related
set cin
set ai
set cino=:0g0t0(susj1

" Editing related
set backspace=indent,eol,start
set whichwrap=b,s,<,>,[,]
set mouse=a
set selectmode=
set mousemodel=popup
set keymodel=
set selection=inclusive

" Misc
set wildmenu
set spell

" Encoding related
set encoding=utf-8
set langmenu=zh_CN.UTF-8
language message zh_CN.UTF-8
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1

" File type related
filetype plugin indent on

" Display related
set ru
set sm
set hls
if (has("gui_running"))
    set guioptions+=b
    colo torte
    set nowrap
else
    colo ron
    set wrap
endif
syntax on

"=============================================================================
" Platform dependent settings
"=============================================================================

if (has("win32"))

    "-------------------------------------------------------------------------
    " Win32
    "-------------------------------------------------------------------------

    if (has("gui_running"))
        set guifont=Bitstream_Vera_Sans_Mono:h9:cANSI
        set guifontwide=NSimSun:h9:cGB2312
    endif

else

    if (has("gui_running"))
        set guifont=Bitstream\ Vera\ Sans\ Mono\ 9
    endif

endif
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章