Vim支持中文編碼

1、支持中文編碼的基礎

Vim要更好地支持中文編碼需要兩個特性:+multi_byte和+iconv,可以用|:version|命令檢查當前使用的Vim是否支持,否則的話需要重新編譯。

2、影響中文編碼的設置項

Vim中有幾個選項會影響對多字節編碼的支持:

encoding(enc):encoding是Vim的內部使用編碼,encoding的設置會影響Vim內部的Buffer、消息文字等。在 Unix環境下,encoding的默認設置等于locale;Windows環境下會和當前代碼頁相同。在中文Windows環境下encoding的 默認設置是cp936(GBK)。

fileencodings(fenc):Vim在打開文件時會根據fileencodings選項來識別文件編碼,fileencodings可以同時設置多個編碼,Vim會根據設置的順序來猜測所打開文件的編碼。

fileencoding(fencs) :Vim在保存新建文件時會根據fileencoding的設置編碼來保存。如果是打開已有文件,Vim會根據打開文件時所識別的編碼來保存,除非在保存時重新設置fileencoding。

termencodings(tenc):在終端環境下使用Vim時,通過termencoding項來告訴Vim終端所使用的編碼。

3、Vim中的編碼轉換

Vim內部使用iconv庫進行編碼轉換,如果這幾個選項所設置的編碼不一致,Vim就有可能會轉換編碼。打開已有文件時會從文件編碼轉換到 encoding所設置的編碼;保存文件時會從encoding設置的編碼轉換到fileencoding對應的編碼。經常會看到Vim提示[已轉換],這是表明Vim內部作了編碼轉換。終端環境下使用Vim,會從termencoding設置的編碼轉換到encoding設置的編碼。

可以用|:help encoding-values|列出Vim支持的所有編碼。

4、具體應用環境的設置

只編輯GBK編碼的文件

set fileencodings=cp936

set fileencoding=cp936

set encoding=cp936

只編輯UTF-8編碼的中文文件

set fileencodings=utf-8

set fileencoding=utf-8

set encoding=cp936 或者 set encoding=utf-8

同時支持GBK和UTF-8編碼

set fileencodings=ucs-bom,utf-8,cp936

set fileencoding=utf-8

set encoding=cp936 或者 set encoding=utf-8

如果在終端環境下使用Vim,需要設置termencoding和終端所使用的編碼一致。例如:

set termencoding=cp936

或者

set termencoding=utf-8

Windows記事本編輯UTF-8編碼文件時會在文件頭上加上三個字節的BOM:EFBBBF。fileencodings中設 置ucs-bom的目的是為了能夠兼容用記事本編輯的文件,不需要的話可以去掉。Vim在保存UTF-8編碼的文件時會去掉BOM。去掉BOM的最大好 處是在Unix下能夠使用cat a b>c來正確合并文件,這點經常被忽略。

5、FAQ

為什么在Vim中一次只能刪除半個漢字?

因為encoding設置錯誤,把encoding設置為cp936就可以解決此問題。在Unix環境下Vim會根據locale來設置默認的encoding,如果沒有正確設置locale并且沒有設置encoding就會一次只能刪除半個漢字。

Vim為什么不能輸入繁體字?

把euc-cn或者GB2312改為cp936就可以了。euc-cn是GB2312的別名,不支持繁體漢字。cp936是GBK的別名,是GB2312的超集,可以支持繁體漢字。

Vim為什么提示不能轉換?

因為在編譯Vim時沒有加入iconv選項,重新編譯Vim才能解決。

如何打開一個GBK編碼的文件并另存為UTF-8編碼?

保存文件時運行命令|:set fileencoding=utf-8|就可以了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容