vim里面的編碼主要跟三個參數有關:enc(encoding), fenc(fileencoding)和fencs(fileencodings)
fenc是當前文件的編碼,也就是說,一個在vim里面已經正確顯示了的文件(前提是你的系統環境跟你的enc設置匹配),你可以通過改變 fenc后再w來將此文件存成不同的編碼。比如說,我:set fenc=utf-8然后:w就把文件存成utf-8的了,:set fenc=gb18030再:w就把文件存成gb18030的了。這個值對於打開文件的時候是否能夠正確地解碼沒有任何關系。
fencs,是用來在打開文件的時候進行解碼的猜測列表。文件編碼沒有百分百正確的判斷方法,所以vim只能猜測文件編碼。
enc,其作用是顯示, 不管最后的文件是什么編碼的,vim都會將其轉換為當前系統編碼來進行處理,這樣才能在當前系統里面正確地顯示出來,因此enc就是干這個的。在windows下面,enc默認是cp936,這也就是中文windows的默認編碼,所以enc是不需要改的。在 linux下,隨着你的系統locale可能設為zh_CN.gb18030或者zh_CN.utf-8,你的enc要對應的設為gb18030或者 utf-8(或者gbk之類的)。而本人遇到系統locale是en_US.UTF-8,不設置enc顯式不了中文,最后配置enc為utf-8才能顯式。
最后給出Linux編碼全部是UTF-8,VIM可以顯示中文的vimrc文件的配置:
set fileencodings=utf-8,gb2312,gbk,gb18030,big5
set fenc=utf-8
set enc=utf-8