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