« 鄭金生,<藥林外史> 巧合如此 »
Wed 21 Sep 2005
前面我們談了很多有關 vim 的指令,不管是取代、置換、刪除或是搬移等等,這些指令都是讓我們在編輯時比較輕鬆的方法。但是 vim 的編輯當中,有的為了看起來比較舒服,像是對於不同的關鍵字或是程式等等,提供了不同顏色的標明,像是我們之前已經看過的樣子:

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

這些都是可以在 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 熱鍵的設定,我們就留到下次再來討論。
33 Responses to “不是打 vi 的廣告, vim 的環境設定 ( vimrc )”
Leave a Reply
« 鄭金生,<藥林外史> 巧合如此 »
October 10th, 2005 at 7:45 pm
你好
請問我可以轉貼你的vi教學文章到我的個人blog上嗎?
October 10th, 2005 at 8:00 pm
請任意取用,保留出處及作者即可。
October 11th, 2005 at 5:34 am
謝謝你,真的非常感謝^_________^
October 20th, 2005 at 12:00 pm
November 27th, 2005 at 1:56 pm
November 27th, 2005 at 3:34 pm
想請教一下 set ec=utf8 和 language utf8 這兩行設定
set ec=utf8 應該為 set enc=utf8
還有language utf8這行在設定寫好後啟動vim卻回應
Cannot set language to “utf8″
這是vim本身的問題還是說我的系統少了什麼東西嗎?
FreeBSD 4.11和Windows都是如此
November 27th, 2005 at 3:49 pm
抱歉,那些地方的確是錯了,
set enc=utf8
文字的部份是說改成英文訊息,所以應該是
language english
謝謝您的指正。
December 21st, 2005 at 9:25 am
December 28th, 2005 at 12:38 pm
January 14th, 2006 at 7:00 pm
February 22nd, 2006 at 11:48 am
[…] 相關連結: 紅塵一隅間拾得:不是打vim的廣告系列文章 大家來寫Latex […]
May 18th, 2006 at 2:23 pm
剛抓完vim7.0,就找上你這。
你的教學真的很有幫助:)
June 25th, 2006 at 4:19 pm
July 27th, 2006 at 6:12 pm
August 3rd, 2006 at 12:51 pm
請問如何使用設定檔
設定’切換使用底端捲動軸’?
August 3rd, 2006 at 1:04 pm
如果您問的是這裡放的設定檔,就是下載後解開到 $VIM$/ 下就好了($VIM$表示VIM安裝的目錄)。至於底端捲動軸… 在下就不知道這是什麼東西了。
September 2nd, 2006 at 3:41 am
September 4th, 2006 at 3:01 pm
September 27th, 2006 at 5:19 pm
December 17th, 2006 at 10:14 pm
请问set nu 设定显示行数
显示出的数字颜色应该怎样指定?
December 20th, 2006 at 12:27 pm
您可以輸入 :highlight 看您現在的顏色設定及語法。依您的問題,您會需要使用 LineNr 這個變數。
December 27th, 2006 at 10:51 pm
我用lang message zh_CN.utf-8 語言為簡體中文以后,工具欄的tip-top變成了亂碼請問我該怎么配置呢?
December 28th, 2006 at 12:51 pm
不確定您指的工具欄 tip-top 指的為何?在下按照您的設定使用後,在最下面顯示訊息會變成亂碼(這是因為和目前設定的語系不同使然),但是視窗 menubar 上面的文字都還是正常顯示(繁體中文)。
January 4th, 2007 at 3:41 pm
January 5th, 2007 at 12:39 am
我是一個gvim的初學者…
其實打程式有一段時間,最近想跳到vim來
卻發現一個問題:如何在gvim中編譯?
聽說是要另外裝compiler…
但是不知道怎麼用…可以指教一下嗎?
謝謝!!
January 5th, 2007 at 10:49 am
因為 vim 只是一個 editor(編輯器),不是 compiler(編譯器),所以不能用 vim 來 compile 程式是很正常的。不過卻可以在 vim 中執行外部程式,就是用:
詳情可以打:
February 4th, 2007 at 11:07 pm
February 25th, 2007 at 7:21 pm
April 24th, 2007 at 2:10 pm
[…] 菩提樹下說書人-安裝WordPress亂碼問題 月夜火-MySQL 5 使用 UTF-8 配合 WordPress 的問題 PHPNuke utf-8中文測試網站-MYSQL送出一堆亂碼? 竹貓星球-關於phpMyAdmin裡的欄位亂碼,但在phpbb的顯示為正常… 紅塵一隅間拾得-不是打 vi 的廣告, vim 的環境設定 ( vimrc ) digg_url=’http://randy.ohdada.com/wp/?p=430′; digg_skin = ”; digg_bgcolor = ‘#FFFFFF’; digg_title = ‘WordPress%2CMysql%2CphpMyAdmin%2CUTF-8%2Clatin1%E7%9A%84%E4%BA%82%E7%A2%BC%E6%95%85%E4%BA%8B%E9%9B%86′; digg_bodytext = ”; digg_topic = ”; Powered by Gregarious (21) […]
May 2nd, 2007 at 5:20 pm
想請教一下, Wrap 可否達到以下效果
小弟使用重排 gqap 可以, 但想要用 wrap 達到以上的效果, 找了半天, 都用不出來. 只好到此麻煩大家了. 謝謝
May 9th, 2007 at 6:53 pm
試試以下的一個console font, 叫consolas. 下面有link到microsoft那裡下載的:
http://dengmao.wordpress.com/2007/01/22/vim-color-scheme-wombat/
August 7th, 2007 at 1:46 pm
Consolas font 得裝 MS Visual Studio 2005 才能安裝
不然 Consolas 還蠻漂亮的。 :)
August 8th, 2007 at 1:36 am