1. 進來先看看

鑑於仍有許多人還沒找到順手的編輯器,而許多想學 vi 的人又覺得無從下手,因此在此提出一些個人的心得,希望能對這些朋友有點幫助。或許也減少一點 FAQ 吧!

真要深入的話,大多數的前輩都認為 viemacs/xemcas 還難學。但誰又真的需要熟悉編輯器的所有功能呢?你大可以邊用邊學啊!需要用到的先學,其它的就放一邊,只要能善用一些常用到的功能,又何必要那麼深入呢?而且您在使用當中經常會發現一些新功能,這又會馬上讓您給賺到了。


1.1 為什麼選 Vim

最最重要的原因是可以正確處理中文!其它如 elvis, vile, nvi 在中文方面都會有問題(nvi-m17n 的版本已可以正確處理 Big5 中文,但功能仍不及 Vim1.1完整)。另外就是許多作業系統都有 Vim 可用。當然如果您不需要中文支援的話,也建議使用 elvis1.2vile 則有 emacs 的味道,而 nvi 大概是最忠於原味的了!至於原始 vi 的書已有中文翻譯(O'Reilly),各位到大一點的書局翻翻就有了。所以選定 Vim 做對象,兼述及 elvis,至少她不「排斥」中文。1.3

另一個原因,Vim 不僅是自由軟體(Free Software1.4),也是慈善軟體(CharityWare1.5),如有贊助或評比得獎(幾乎是年年最佳編輯器獎 :),所得皆救助烏干達 AIDS 孤兒。您要使用當然是免費,您要捐款贊助當然是不勉強啦!但如果有評比有獎金可拿的,您去投她一票就是功德無量了。另外,如果想網路購書,可以透過 ICCF 的網頁 http://iccf-holland.org/click.html 來訂購,這樣 Amazon 會付一些贊助金給 ICCF,完全不會多花您一毛錢。

另外 Vim 的規則表示式(regular express)頗完整,您也可借這個機會學 regexp,因為您在 sed, awk, perl, less, grep...中也是要用到,早點習慣 regexp,您生活在 Linux(Un*x)的世界會更美好。學了 regexp 您會有點看不起 Windows 系統中的找尋工具的。

由於是慈善軟體,廣結善緣,因此連中文繁體都支援,不簡單。但也因此最近的版本有點肥,但又不會太肥(比 xemacs 好多了啦!)。這麼可愛的軟體,能不用她嗎?


1.2 何處抓 Vim(elvis)?

http://www.vim.org/
http://vim.sf.net/download.php
ftp://ftp.vim.org/pub/vim/

找個自己中意的 mirro 站抓。或許也順便抓 Win32 的可執行檔回來在 windows 系統中使用。別忘了 runtime 檔也要抓,否則會無法找到需要的檔案來執行。

http://elvis.the-little-red-haired-girl.org/
也可試試 elvis(當然也是自由軟體)。

ftp://ftp.cs.berkeley.edu/ucb/4bsd/
ftp://ftp.foretune.co.jp/pub/tools/nvi-m17n/
nvi-m17n 也可以一試,目前已可以支援中文。

目前最新的版本,Vim 是 6.1,elvis 是 2.2h-beta,nvi 是 1.79。當然,本文的重點是放在 Vim


1.3 編譯安裝

只講重點,避免囉嗦!


1.3.1 Vim

1. configure 時加上:
   --enable-multibyte
   --enable-xim
   --enable-fontset
   --enable-gui=gtk
   --enable-perlinterp    需嵌入 perl 的話
   --enable-pythoninterp  需嵌入 python 的話
   GUI 可有好幾種選擇,但建議使用 gtk+,比較穩定。

2. ~/.vimrc 加入:
   set enc=big5
   set guifontset=英文字型,中文字型
   設了 guifontset 就不能設 guifont 否則會優先使用
   guifont,這樣就找不到中文字型了!console 下或 xterm
   下的話,就看您用什麼字型就顯示什麼字型,和 guifontset 無關。

   英文字型要用固定字,我個人的實際設定例子(1024x768):

   set guifontset=-b&h-*-medium-r-normal-*-*-120-*-*-m-*-*-*,
   \-arphic-*mingti2l*-medium-r-normal-*-*-190-*-*-c-*-big5-0

   Windows 中文版無需設 guifontset,只要設 guifont 即可。例如:

   set guifont=Andale_Mono:H11:W6

3. locale 要設成 zh_TW.Big5,意思就是您的系統的 i18n
   支援要完整,我個人的設定如下:

   unset LC_ALL
   export LC_CTYPE=zh_TW.Big5

1.3.2 elvis

elvis 沒什麼好說的,GUI 版本要靠靠 XA+CV 來顯示及輸入中文,因為他還不支援 i18n/XIM。但在 console/rxvt 下則可以顯示、輸入中文。至於其他外觀調整,就請 man elvis

1.3.3 nvi-m17n

nvi 是在 *BSD 系統的標準配備,m17n(multilingualization, 取前 m 及後 n 及其中的 17 個英文字母,合成 m17n) 則是日本朋友修改的版本,目前也可以用於中文,如果您系統上也有 nvi-m17n 的話,可以設定 /.nexrc 如下:

set noskipdisplay
set displayencoding=big5
set inputencoding=big5
set fileencoding=big5
set autodetect=tw


1.4 勤前教育

Vim 的基本模式(basic mode)可有六種:

1.4.1 常態模式(Normal mode)

您一進入 vim 就是處於這常態模式,只能下按鍵指令,不能輸入編輯文字。這些指令可能是游標移動的指令,也可能是編輯指令或尋找替換指令。

1.4.2 插入模式(Insert mode)

按 i 就會進入插入模式,此時才可以鍵入文字,寫您的文章,按 Esc 又會回到正常模式。此時在狀態列會有 - INSERT - 字樣。

1.4.3 命令列模式(Cmdline mode or Command-line mode)

按冒號:(別忘了 Shift 鍵)就會進入命令列模式,左下角會有一個冒號:出現可下 ex1.6指令。也是按 Esc 回命令列模式。反正正常狀態都是處於常態模式,這樣才不會把您辛苦打字的文章給隨便搞亂掉。搜尋時的 / 及 ? 按鍵也是屬於命令列模式。

1.4.4 反白模式(Visual mode)

這就是把需要處理的文字反白起來,等待處理的模式,底部狀態最會有 - VISUAL -- VISUAL LINE -- VISUAL BLOCK - 字樣。詳細會在第 7 章,頁 [*],做介紹。

1.4.5 選擇模式(Select mode)

和反白模式的異同待瞭解。

1.4.6 Ex 模式(Ex mode)

這和命令列模式是一樣的,但下了命令後不會返回,會留在行編輯器 ex 的狀態,有一個冒號在那兒,等待輸入命令。由 gQ 按鍵可以進入 Ex 模式,輸入 visual 可以返回正常模式。

其它還有五種的額外模式(additional mode)!這裡不準備說明,會在第 3.1 節,頁 [*] 做介紹。反正,使用 Vim 的無上心法就是,有問題先考慮按 Esc 鍵回到常態模式再說。


1.5 基本教練:step by step


1.5.1 由命令列來開檔

vim test.txtgvim test,txt,如果您的系統 vivim 的連結檔話,就可以直接用 vi test.txt。以下就直接用 vim 代表 vigvimelvis,因操作是一樣的有不同的地方會加注說明。


1.5.2 先進入 vim 後再開檔

進入 vim 後,使用冒號命令 :e test.txt,就可以編輯 test.txt 這個檔。第 1.5.1 小節及第 1.5.2 小節這兩個開檔法,如果 test.txt 不存在的話,就會開一個以 test.txt 為名的新檔案。

如果是 gvim,可由 icon(gtk 版本才有)或功能表來叫出 file browser 來選看看您要編輯哪一個檔,但如果您是初學的話不建議您這麼做,vi 就是以按鍵快速聞名,這是她的優點,您還是學起來吧,不然沒有 GUI 的時候會很不習慣的。


1.5.3 編寫文件

進入 vim 後,按 i 進入插入模式,就可以編寫您的文件了。在 vim 游標的移動可以由方向鍵來移動。Backspace 鍵可消去前一個字元,中文的話是一個中文字。Del 鍵可刪除游標所在處的字元(中文字)。

原始 vi 是不能在插入模式隨意移動游標的,得進入正常模式才能移動,因此就常常要按 Esc 來變換模式。vimelvis 都打破了這個規矩。

1.5.4 存檔、離開

如果您寫好您的文件,就可以按 Esc 回到正常模式,然後 :w 就會存檔(注意,是冒號命令),但還不會離開 vim,要離開可按 :q,就可以了!也可以合起來用,:wq,就樣就會存檔後離開。怎麼樣,也不會很難吧!只不過操作方式和別的編輯器不一樣罷了,這樣豈不是很有個性。:-)

盡量記住按鍵的意義,才不必死背,如 e 是 edit(編輯),w 是 write(寫入),q 是 quit(停止、離開)。

這裡要提醒大家一下,許多 distributions 中會編譯一個小型的 vim,啟動會比較快一點,但缺乏許多本文要用到的功能,因此,建議您使用 vim/gvim,而暫時避免使用 vi,或者就把 vi 直接連結到正常的 vim 上去。Slackware Linux 的話,他的 vi 是連結到 elvis 的,也請使用 vim/gvim 為指令,或改變 vi 的連結。而 *BSD 系統,使用的很可能就是 nvi,這些請使用時注意一下,以免和文中內容所述不符。

如果不確定自己是使用哪一種版本的 vi,可以進入 vi 後按冒號 : 後再輸入 ver,然後按 Enter,就會得知是哪一種版本的 vi,如果是 vim 的話,還會顯示前有 +/-號的各功能,有 + 號的,表示有編譯進去,-號的表示沒有這項功能。

好了,這是就編輯的整個過程。下回開始是詳述各部份的功能,把 Vim 解剖開來講,您可以馬上現學現賣。由於 vi/vim 的操作方式很有個性,因此,用了一次就會記住有這麼一個功能,想忘也忘不了,但有時按鍵難免會忘記,有這麼一種功能大概是忘不了的,查了幾次指令就可以記得住了。

Compiled by Edward G.J. Lee (2003-03-03)