http://edyfox.codecarver.org/html/vim_fileencodings_detection.html
本文主要講解下,讓Vim能正確顯示和保存各種編碼文件的一些常用方法。
Vim編碼配置里面有3個選項,分別是encoding 、fileencodings、fileencoding 簡寫分別對應為enc、fencs、fenc。
encoding(enc): 此項目配置的是vim的默認顯示編碼,如果你打開的文件編碼與該屬性配置的編碼不同,那么Vim會將編碼自動轉換到這種編碼然后再顯示,
如果如果這2種編碼集合完全對應那么很有可能出現壞塊也就是沒轉換成功然后從列表(下面就講到,實際上就是fens)中搜尋下一個編碼,也就是出現我們所說的亂碼。
驗證上述結論:用vim打開一個文件,輸入":set encoding" vim 會自動把encoding的值打印出來。
fileencodings(fencs): 此項目配置的是一個編碼列表,Vim在讀取文件的時候,會根據這里的編碼自動檢測,如果檢測失敗則嘗試下一個,直到檢測成功為止。如果一直沒有轉換成功,則此值會為空,也就是上述encoding的枚舉,你可以重新調整循序來調整優先級。(需要在.vimrc中修改)
驗證上述結論:同上,打印fencs的值(fencs 就是 fileencodings)
fileencoding(fenc):這個東西尤其重要這個配置的是新建文件和保存文件時文件的編碼,如果它的值與encoding(enc)不一樣,那么保存的時候Vim會自動把文件內容由encoding(enc)的編碼轉換為fileencoding(fenc)配置編碼再保存。而讀取文件的時候,該選項的值會自動同步為fileencodings(fencs):配置的有效編碼。(實際上就是上面說的轉換規則)
例如:
如果我們是如下配置
encoding(enc):utf-8
fileencodings(fencs):utf-8,gbk
fileencoding(fenc):gbk
那么我們打開一個gbk編碼的文件,Vim會將內容轉換為utf-8格式來顯示,但是保存的時候文件的編碼卻依然是gbk
如果我的工作環境主要是編輯utf-8,偶爾會修改一下gbk的編碼,我們該怎么配置呢?
首先我們可以把fileencoding留空,然后只配置fileencodings(fencs):utf-8,gbk,ucs-bom,cp936(這個需要在.vimrc中配置,不然下一次打開不會改變,而且這個列表是打開后不能改的,改了也沒效果)
按照上面的規則,Vim就會自動把文件保存為gbk的編碼了
如果我編輯了一個utf-8文件,想把它以gbk的格式保存,該怎么辦呢?
在命令行模式輸入 :set fenc=gbk 然后保存文件即可,保存之后再輸入:set fenc=utf-8就可以繼續編輯其他utf-8文件了