vim-logo.gif前面我們談了很多有關 vim 的指令,不管是取代、置換、刪除或是搬移等等,這些指令都是讓我們在編輯時比較輕鬆的方法。但是 vim 的編輯當中,有的為了看起來比較舒服,像是對於不同的關鍵字或是程式等等,提供了不同顏色的標明,像是我們之前已經看過的樣子:

vim color code demo

以及針對許多不同的需要,像是想要每行前面都會看到行數:

vim set nu demo

這些都是可以在 vim 裡面設定的。

由於在 vim 設定檔 _vimrc(在 UN*IX 環境它可能是 .vimrc) 裡面可以做的事情太多,舉凡像是縮寫設定(讓你可以少打一點字)、設定熱鍵、根據不同檔案類型編寫不同格式的設定、寫程式(看過廖董介紹的 vim 走迷宮了嗎?)諸如此類你想得到的對於一個檔案的設定, vim 可能都有。有鑑於此,所以程式和熱鍵設定的部分移到以後再說,這次我們就只討論一些對於編輯上可能會用到的設定。

設定檔 _vimrc/.vimrc 的位置:

剛剛提到 vim 的設定檔,在 windows 上的話是 _vimrc,如果是 UN*IX 系統的話就是 .vimrc。在 windows 上的系統的話,看你把 vim 安裝在什麼地方,那麼在你安裝目錄下就會發現 _vimrc (同時可能也會有_gvimrc),比方我安裝在 C:\vim ,那在 C:\vim\ 下就會看到 _vimrc。那在 UN*IX 下的話,你可以在自己的 home 目錄下編寫自己的 .vimrc。

_vimrc / .vimrc 的設定:

顯示行數設定:

一般來說在 vim 裡面,如果你指的是環境設定的話,通常會用 set optionname 來表示。像我們前面提到行數的東西,我們就可以在 _vimrc 裡面加一行:

set nu

nu 指的就是 number,所以你用

set number

這也是可以的。

那有時候你可能會想要對 _vimrc 加註解,那就是在一行的開頭用「”」(double quotes)這個符號。

如果你想要把你比對到的關鍵字以特殊顏色標記出來,可以用

set hls

hls 是 hlsearch,是 highlight search 的簡寫。不過當你不喜歡這個設定的時候,你可以用:

set nohls

你或許也注意到了,設定某樣事情是用 set optionname ,如果不要的話就是用 set nooptionname。

如果你想要在搜尋的時候對於英文字不要分大小寫的話,也就是 ignore case,那就是用:

set ic

如果你不記得自己大概想要搜尋的關鍵字是什麼的話,也可以用這個下面這個設定,vim 會在你每打入一個字元的時候就跳到目前符合現在輸入字串的地方去:(不過我個人不太喜歡這個功能,因為打快一點就會發現螢幕跳得很厲害)

set incsearch

當我們在寫程式的時候,大部分人可能會希望能有自動縮排的功能,這也可以用 vim 設定:

set ai

不過或許更關鍵的是怎麼樣設定像上面那樣有彩色的東西。基本上如果你用 windows 版本的話,使用我目前在用的設定檔,應該你打開像是 .c .cpp .php 等等都會出現彩色的效果。不過有時候你可能只是從某個地方 copy 複製了一段程式碼貼到 vim 裡面,這個時候 vim 就不知道你貼進來的東西是什麼格式,你可以用 set ft=blah blah 來指定,比方說我想要指定貼進來的東西是一段 C 的程式碼,那就是用:

set ft=c

如果你不要想這些用顏色幫你標記的格式,可以用 syntax off 來取消,所以如果要開啟這項功能的話也就是:

syntax on

如果你不喜歡原來的縮排(原來可能是 8 個空白),你也可以自己改,比方說我想要用兩個空白的話就是:

set shiftwidth=2

但是儘管如此,你設定了這一堆結果發現你讀進來的卻是 UTF8 的中文文件,結果你沒辦法編輯,怎麼辦?在 vim 可以幫你設定這是 UTF8 文件:(enc 就是 encoding)

set enc=utf8

結果當你設定為 UTF8 的時候卻發現 vim 的訊息變成亂碼,因為你本來安裝的時候可能是用中文的關係,不過無所謂,你可以改成英文訊息:

language english

在你裝好 vim 之後,可能會發現每次你修改過一個檔案之後,就會多出另外一個同名但是後面多了個「~」的檔案,這是 vim 幫你作 backup 所產生出來的,如果你不想要,可以取消:

set nobackup

當然啦,如果你不喜歡現在用的字型(in gvim),也可以改:

set gfn=Courier_New:h14

這就是代表用 Courier_New 這個字型,且字型大小是 14 (h 表示字的高度)。

另外,如果你想說有些固定的字串太長,想要少打幾個字的話, vim 也提供了簡寫功能:

abbr hw homework

這也就是說以後你只要打 hw 之後再打一個空白的話, hw 就會被自動取代成 homework。但是如果你只想針對命令列輸入指令才要作簡寫取代的話,那就是:

cabbr hw homework

不過由於 :abbr 設定是對於命令列模式和編輯模式(插入狀態)都會成立的,如果你只想它在編輯模式(插入狀態)生效的話,就得用:

iabbr hw homework

如果要取消這些簡寫的話,可以在命令列模式下以

:una hw

取消對 abbr hw 的自動取代。同理,cabbr 和 iabbr 就是用 :cuna :iuna 來取消。

最後附帶一提的是,如果你設定了一堆東西,可是在編輯的時候忘了自己作了哪些設定,可以用 :set 看到目前的設定狀況,如果想要看細部所有的設定,則是用 :set all

這些設定可能看起來有些煩人,你如果懶得理會的話,可以抓現成的設定檔來用,或是到網路上尋找其他人已經寫好的設定檔來使用,都是很方便的。為了避免篇幅過於冗長,關於 vim 熱鍵的設定,我們就留到下次再來討論。