Gvim比emacs小,適用於編程,而後者功能全,載入外掛程式多,啟動稍慢。個人gvim足夠用。
Vim 可以很好的編輯各種字元編碼的檔案,包括 UCS-2、UTF-8 等流行的 Unicode 編碼方式:
Vim 有四個跟字元編碼方式有關的選項,encoding、fileencoding、fileencodings、termencoding,它們的意義如下:
* encoding: Vim 內部使用的字元編碼方式,包括 Vim 的 buffer (緩衝區)、菜單文本、訊息文本等;
* fileencoding: Vim 中當前編輯的檔案的字元編碼方式,Vim 儲存檔案時也會將檔案儲存為這種字元編碼方式 (不管是否新檔案都如此);
* fileencodings: Vim 啟動時會按照它所列出的字元編碼方式逐一探測即將開啟的檔案的字元編碼方式,並且將 fileencoding 設定為最終探測到的字元編碼方式。因此最好將 Unicode 編碼方式放到這個列表的最前面,將拉丁語系編碼方式 latin1 放到最後面;
* termencoding: Vim 所工作的終端 (或者 Windows 的 Console 視窗) 的字元編碼方式。
Vim 的多字元編碼的工作方式:
1. Vim 啟動,根據 .vimrc 中設定的 encoding 的值來設定 buffer、菜單文本、訊息文的字元編碼方式;
2. 讀取需要編輯的檔案,根據 fileencodings 中列出的字元編碼方式逐一探測該檔案編碼方式。並設定 fileencoding 為探測到的,看起來是正確的 (注1) 字元編碼方式;
3. 對比 fileencoding 和 encoding 的值,若不同則調用 iconv 將檔案內容轉換為 encoding 所描述的字元編碼方式,並且把轉換後的內容放到為此檔案開闢的 buffer 裡,此時我們就可以開始編輯這個檔案了。注意,完成這一步動作需要調用外部的 iconv.dll (注2),你需要保證這個檔案存在於 $VIMRUNTIME 或者其他列在 PATH 環境變數中的目錄裡;
4. 編輯完成後儲存檔案時,再次對比 fileencoding 和 encoding 的值。若不同,再次調用 iconv 將即將儲存的 buffer 中的文本轉換為 fileencoding 所描述的字元編碼方式,並儲存到指定的檔案中。同樣,這需要調用 iconv.dll。
由於 Unicode 能夠包含幾乎所有的語言的字元,而且 Unicode 的 UTF-8 編碼方式又是非常具有性價比的編碼方式 (空間消耗比 UCS-2 小),因此建議 encoding 的值設定為 utf-8。這麼做的另一個理由是 encoding 設定為 utf-8 時,Vim 自動探測檔案的編碼方式會更準確 (或許這個理由才是主要的 ;)。我們在中文 Windows 裡編輯的檔案,為了兼顧與其他軟體的相容性,檔案編碼還是設定為 GB2312/GBK 比較合適,因此 fileencoding 建議設定為
chinese (chinese 是個別名,在 Unix 裡表示 gb2312,在 Windows 裡表示 cp936,也就是 GBK 的字碼頁)。
注1: 事實上,Vim 的探測準確度並不高,尤其是在 encoding 沒有設定為 utf-8 時。因此強烈建議將 encoding 設定為 utf-8,雖然如果你想 Vim 顯示中文菜單和提示訊息的話這樣會帶來另一個小問題。
注2: 在 GNU 的 FTP 上可以下載到 iconv 的 Win32 版(http://mirrors.kernel.org/gnu/libiconv/libiconv-1.9.1.bin.woe32.zip)。
注3: 查看協助 :h iconv-dynamic。
注4: 前方中提到的.vimrc在windows下為_vimrc,存在於vim安裝目錄下。
以下為在windows下gvim7.2地設定檔_vimrc,使用此配置可解決安裝中文版vimdoc後出現的菜單、控制台資訊等亂碼現象。
set encoding=utf-8
set fileencodings=utf-8,chinese,latin-1
if has("win32")
set fileencoding=chinese
else
set fileencoding=utf-8
endif
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
language messages zh_CN.utf-8