« 鄭金生,<藥林外史> 巧合如此 »
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 熱鍵的設定,我們就留到下次再來討論。
41 Responses to “不是打 vi 的廣告, vim 的環境設定 ( vimrc )”
Comments
Leave a Reply
Trackbacks
- wiki:computer:soft:vim [MooGoo]
[...] 設定 http://greenisland.csie.nctu.edu.tw/wp/2005/09/21/341/ [...]
- Burning-G
- 有涯小札 » 網摘
[...] 紅塵一隅間拾得 » 不是打vi的廣告, vim 的環境設定 ( vimrc ) 看看如何令 vim 更加好用。 (tags: vim editor) [...]
- 國生三年才開始 » vim 走迷宮
[...] http://greenisland.csie.nctu.edu.tw/wp/2005/09/21/341/ [...]
- Lighten, Sharpen, Saturate » Blog Archive » Vim再起
[...] 相關連結: 紅塵一隅間拾得:不是打vim的廣告系列文章 大家來寫Latex [...]
- vim | 最初的地方
[...] 紅塵一隅間拾得 » 不是打vi的廣告, vim 的環境設定 ( vimrc ) » 閱讀全文 | alan 的Blog | 發表新回應 [...]
- 竹貓星球 :: 觀看文章 - [問題] MySQL 4.0升級至4.1,有關utf8資料的問題
[...] 嗯 我當初是用 vim 取代和修改的 平常用上手了 直接就想到利用這個 vim 可以轉換編碼為 utf8 也有 sql 的語法顏色 所以蠻好改的 單引號的部份有錯看顏色就知道 我在匯出和修改前 先把 wordlist 和 wordmatch 兩個資料表清空 那兩個佔用了一半的容量 刪除完大概還剩 70 mb 勉強還可以編輯…… 關於 vim 的設定 您可以看下面的網頁: 點選此處 [...]
- 政大應數《數理資訊》討論版 :: 觀看文章 - terminal輸入中文會變亂碼?
[...] 上禮拜試驗的時候 是在一般的指令下或是進 vim 後打字都看不到中文 例如:「中文」會變成「 äæ<87> 」,大部份會變成這種形式 也有少部份會變成「 123455 」像這樣以斜線加數字表示的 剛打完可以看到正確的字,一下又變亂 今天照老師寫的那篇去做 一般環境可以打也看得到,可是進 vim 後測試還是沒有辦法 在網路上找到這篇「 vi 輸入中文會顯示 /XX/XX 」 http://netlab.cse.yzu.edu.tw/~statue/freebsd/zh-tut/vi.html 和我的問題有相關嗎? 也找到設定 vimrc 的相關教學 http://greenisland.csie.nctu.edu.tw/wp/2005/09/21/341/ 還是沒看到解決方法 另外 這一台 mac 的 CJK 是裝在公用資料夾 編譯後還是看不到中文勒? [...]
- HEMiDEMi - 共享書籤- 紅塵一隅間拾得 ? 不是打vi的廣告, vim 的環境設定 ( vimrc )
- vim
- la tour de Taiwan + bicycle only » WordPress,Mysql,phpMyAdmin,UTF-8,latin1的亂碼故事集
[...] 菩提樹下說書人-安裝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) [...]
- Cornelius' Blog: Vim 學習地圖
[...] usr_05.txt另外可參閱一些 vimrc 的說明,如: vimrc 常用設定(問答) , vim 的環境設定 ( vimrc )進階的 vimrc 設定,如:vimrc sample .vimrc for perl programmers Vimrc for Python .vimrc [...]
- Next Step...
開始紀錄Python(其實整篇幾乎都在閒話家常)…
其實Python已經唸一陣子了,而且這次是真的努力唸,主要的原因是Google App…
- vim vimrc - Google
[...] vimrc is divided into these sections: " " * Terminal …www.stripey.com/vim/vimrc.html
- VIM 資訊整理 @ H's 手札 :: 痞客邦 PIXNET ::
[...] 大家來學VIM* vim入門* 鳥哥的 Linux 私房菜 — vim 程式編輯器* 紅塵一隅間拾得 » 不是打 vi 的廣告, vim 的環境設定 ( vimrc )移動:方向鍵、Home/End、Page Up/DownG [...]
- 用源碼啊,路克: vimrc
[...] vimrc 這幾天先是灌了幾次cygwin,課堂上又要連到助教提供的server,不斷的重設.vimrc檔,覺得應該要整理一下資料。首先,最正式的manual:http://vimdoc.sourceforge.net/htmldoc/usr_05.htmlhttp://vimdoc.sourceforge.net/htmldoc/options.htmlvimrc 常用設定(問答)http://plog.longwin.com.tw/my_note-app-setting/2006/04/17/vimrc_q_and_a_2006大家來學VIM(一個歷久彌新的編輯器)[九] set 功能設定http://www.study-area.org/tips/vim/Vim-9.html不是打 vi 的廣告, vim 的環境設定 ( vimrc )http://greenisland.csie.nctu.edu.tw/wp/2005/09/21/341/傳說中的vimrchttp://amix.dk/vim/vimrc.htmlhttp://www.stripey.com/vim/vimrc.html這篇整理一下資料,下一篇我們來談談tab的設定的問題,順便分享一些programming styles,我最近的上課心得。to be continued … 張貼者: 其可左右 位於 上午 5:49 標籤: vim [...]
- vi
- Diigo Diary 10/10/2009 « Benx Blog
[...] 紅塵一隅間拾得 » 不是打 vi 的廣告, vim 的環境設定 ( vimrc ) [...]
- [something]gVim配置方案 - 一日一爱 - 博客大巴
- GAIS: VI
[...] http://linux.vbird.org/linux_basic/0310vi.php - [庫存網頁] [更多結果] [類似網頁] [網頁資訊] 紅塵一隅間拾得 不是打 vi 的廣告嚗? vim 的環境設定 ( vimrc ) [...]
- 凍仁的 Ubuntu 筆記: 【Editer】vimrc - vi 環境設定
[...] ai “自動縮排set enc=utf8 “文字編碼加入utf8相關連結:★不是打 vi 的廣告, vim 的環境設定 ( vimrc )★大家來學 vim - 一個歷久彌新的編輯器★vimrc [...]
« 鄭金生,<藥林外史> 巧合如此 »
October 10th, 2005 at 7:45 pm
你好
請問我可以轉貼你的vi教學文章到我的個人blog上嗎?
October 10th, 2005 at 8:00 pm
請任意取用,保留出處及作者即可。
October 11th, 2005 at 5:34 am
謝謝你,真的非常感謝^_________^
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
謝謝您的指正。
May 18th, 2006 at 2:23 pm
剛抓完vim7.0,就找上你這。
你的教學真的很有幫助:)
August 3rd, 2006 at 12:51 pm
請問如何使用設定檔
設定’切換使用底端捲動軸’?
August 3rd, 2006 at 1:04 pm
如果您問的是這裡放的設定檔,就是下載後解開到 $VIM$/ 下就好了($VIM$表示VIM安裝的目錄)。至於底端捲動軸… 在下就不知道這是什麼東西了。
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 5th, 2007 at 12:39 am
我是一個gvim的初學者…
其實打程式有一段時間,最近想跳到vim來
卻發現一個問題:如何在gvim中編譯?
聽說是要另外裝compiler…
但是不知道怎麼用…可以指教一下嗎?
謝謝!!
January 5th, 2007 at 10:49 am
因為 vim 只是一個 editor(編輯器),不是 compiler(編譯器),所以不能用 vim 來 compile 程式是很正常的。不過卻可以在 vim 中執行外部程式,就是用:
詳情可以打:
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 還蠻漂亮的。 :)
October 1st, 2008 at 11:23 pm
非常感謝你寫了一系列 vim 的文章,過去我在這邊學了很多,尊定了我這幾年來持續使用 vim 作為我首要 editor 的習慣。
最近遇到一個問題:
在很多不同的環境下,我都是有在使用 vim,但常常在環境 A 的 vim 與環境 B 的 vim 設定不同,所以得花很多精神在處理。有時可以透過拷貝 .vimrc 來解決,有時候則不行,因為兩個環境下 vim 的 global setting 不一樣。
有什麼方式可以一次把 vim 當下的 setting 整個匯出(包括 global, system-wide, …) 呢?
October 2nd, 2008 at 6:17 pm
因為有一些設定是在編譯 vim 的時候產生的,在這種情況下,就很難說別的設定搬過來就會生效。
我的作法其實和您差不多,也就是用copy .vimrc 的方式。只是一定要的和一定不要的,我都會寫在 .vimrc 裡面。其他既然算是可有可無就隨系統設定了。
May 9th, 2009 at 9:33 pm
set shiftwidth=4那邊應該還可以加上下面這個
set tabstop=4
這樣顯示出來的樣子才會是四格的tab縮排