在 Linux 上,常見的情況是環境的內部編碼使用 UTF-8 ,而 UTF-8 可以同任何一種語言編碼作無損轉換,這就保證了系統的多語言處理能力。Vim 這方面秉承了 Unix/Linux 的傳統,在內部編碼使 UTF-8 的時候,可以同時處理不同意語言編碼的文件。
以下列出了和語言編碼的相關的設置:
環境變量 LANG(所有語言變量的默認值);
環境變量 LC_CTYPE(使用的內部編碼);
環境變量 LANGUAGE(界面語言)
Vim 選項 encoding(Vim 的內部編碼);
Vim 選項 termencoding(Vim 在與屏幕/鍵盤交互時使用的編碼);
Vim 選項 fileencoding(Vim 當前編輯的文件在存儲時的編碼);
Vim 選項 fileencodings(Vim 打開文件時的嘗試使用的編碼);
Vim 選項 ambiwidth(“不明寬度”字符的處理方式);
如果按照目前 Linux 下的慣例,內部編碼一律使用 UTF-8 的話,會有一些額外的好處,其中之一就是在這種情況下 Vim 支持同時編輯多種不同編碼的文件,如簡體中文和繁體中文。這樣,衆多關於語言編碼的 Vim 選項就有了用武之地了。下面進一步說明一下這些選項和推薦設定(如果適用的話):encoding=utf-8:不管文件的編碼如何,不管如何顯示和輸入,Vim 內部使用的編碼是 UTF-8;這是國際化支持的基礎。
termencoding:取決於實際的終端或 X Window 的設定。舉例來說,如果選擇語言簡體中文登錄到 X Window,或者正在使用 CXTERM [10] 的話,那麼該選項應被設爲 GB2312;如果使用缺省的語言(LANG=en_US.UTF-8)登錄到 X Window,該選項就應該設爲 utf-8。從 Windows 下使用 PuTTY 遠程連接 Linux 的請特別注意,測試表明,僅在使用 UTF-8 的情況下,PuTTY 才能可靠地支持中文的顯示和輸入(顯示字體必須設成中文字體)。
fileencoding:文件載入時,該選項被置爲 Vim 認定的文件編碼,因此,存儲時文件的編碼不會改變。此處和下面 fileencodings 可使用的編碼爲 libiconv 支持的所有幾百種編碼(如果編譯時包含了 iconv 特性的話),與中文相關的有 gb2312、gbk、gb18030、hz-gb-2312、iso-2022-cn、big5、cp936、cp950 等。如果創建新文件,你又不希望使用 UTF-8 作爲文件編碼時,那麼,你可能需要手工設定該選項,如“:set fileencoding=gb2312”。需要注意的一點是,使用“set”來設定該選項的話會改變以後新建文件的缺省編碼,而使用“setlocal”的話則隻影響當前文件(參考“:help setlocal”)。
fileencodings=ucs-bom,utf-8,chinese:Vim 會首先判斷文件的開頭是否是一個 Unicode [7] 的 BOM(byte order mark)字符 [8],是的話則把文件的其餘內容解釋成相應的 Unicode 序列;否的話再試圖把文件內容解釋成 UTF-8 的序列;再失敗的話,則把文件解釋爲簡體中文(chinese 是一個跨平臺的簡體中文字符集的別名,Linux 下相當於 gb2312 和 euc-cn;此處也可以根據需要以 gb2312、gbk 或 gb18030 等編碼替代)。需要注意的是,該順序不能顛倒,並且在後面再添加其它編碼如 big5、latin1 也是沒有意義的,因爲 Vim 不能識別 8 比特編碼中的錯誤,因此這些編碼後列的編碼永遠不會被用到。
ambiwidth=double:把所有的“不明寬度”字符 [9]——指的是在 Unicode 字符集中某些同時在東西方語言中使用的字符,如省略號、破折號、書名號和全角引號,在西方文字中通常字符寬度等同於普通 ASCII 字符,而在東方文字中通常字符寬度等同於兩倍的普通 ASCII 字符,因而其寬度“不明”——的寬度置爲雙倍字符寬度(中文字符寬度)。此數值只在 encoding 設爲 utf-8 或某一 Unicode 編碼時纔有效。需要額外注意的是,如果你通過終端使用 Vim 的話,需要令終端也將這些字符顯示爲雙寬度。
需要設定的選項通常放在用戶的 Vim 資源配置文件中,即在 ~/.vimrc 文件中加入:
set encoding=utf-8 set fileencoding=chinese set fileencodings=ucs-bom,utf-8,chinese set ambiwidth=double |
在使用內部編碼 UTF-8 的情況下,如需編輯 fileencodings 之外(其不能自動識別)的文件,則可以使用以下命令:“:e ++enc=編碼 文件名”。詳情可參考“:help ++enc”。
關於系統的環境設置詳見:http://blog.csdn.net/xinhanggebuguake/article/details/8627857
關於VIM的編碼選項的關係可表述如下圖:
修改自:http://www.ibm.com/developerworks/cn/linux/l-tip-vim1/index.html