在vim中編輯不同編碼的文件時(shí)需要注意的幾點(diǎn)
本文講解了vim在編輯多字節(jié)編碼文檔(中文)時(shí)需要了解的一些基礎(chǔ)知識(shí)。注意不涉及gvim,僅指字符終端下的vim。
vim編碼的基本知識(shí):
1、有三個(gè)變量:
編碼——該選項(xiàng)用于緩沖文本(您正在編輯的文件)、寄存器、Vim腳本文件等。你可以把‘編碼’選項(xiàng)想象成設(shè)置Vim的內(nèi)部運(yùn)行機(jī)制。
file encoding——該選項(xiàng)是vim在寫入文件時(shí)使用的編碼類型。
TERM encoding——該選項(xiàng)表示用于輸出到客戶端終端($ TERM)的編碼類型。
2、這三個(gè)變量的默認(rèn)值:
編碼——與系統(tǒng)當(dāng)前的區(qū)域設(shè)置相同,所以在編輯文件時(shí)要考慮當(dāng)前的區(qū)域設(shè)置,否則要設(shè)置的東西會(huì)更多。
Fileencoding——當(dāng)文件打開時(shí),vim自動(dòng)識(shí)別文件的編碼,file encoding是識(shí)別的值。如果為空,則在保存文件時(shí)使用該編碼。如果編碼未被修改,則該值為系統(tǒng)的當(dāng)前區(qū)域設(shè)置。
term encoding——缺省空值,即輸出到終端的內(nèi)容不進(jìn)行編碼轉(zhuǎn)換。
可以看出,在編輯不同代碼的文件時(shí),需要注意的不僅僅是這三個(gè)變量,還有三個(gè)關(guān)鍵點(diǎn):系統(tǒng)當(dāng)前的區(qū)域設(shè)置、文件本身的代碼和自動(dòng)代碼識(shí)別、運(yùn)行vim的客戶端使用的代碼類型。這三個(gè)關(guān)鍵點(diǎn)影響三個(gè)變量的設(shè)置。
如果有人問:為什么我用vim打開中文文檔會(huì)出現(xiàn)亂碼?
答案是不確定的,原因如上所述。如果不知道這三個(gè)關(guān)鍵點(diǎn)和這三個(gè)變量的設(shè)定值,有亂碼是很正常的,沒有亂碼只是巧合。
我們來看看常見情況下這三個(gè)關(guān)鍵點(diǎn)的值,以及這種情況下這三個(gè)變量的值:
1、語(yǔ)言環(huán)境——目前,大多數(shù)Linux系統(tǒng)已經(jīng)采用utf-8作為默認(rèn)語(yǔ)言環(huán)境,但也可能不是。例如,一些系統(tǒng)使用中文地區(qū)zh_CN。GB18030當(dāng)區(qū)域設(shè)置為utf-8時(shí),vim啟動(dòng)后編碼會(huì)設(shè)置為utf-8,這是兼容性最好的方式,因?yàn)槿绻褂胾tf-8進(jìn)行內(nèi)部處理,無論外部存儲(chǔ)編碼是什么,都可以進(jìn)行無損轉(zhuǎn)換。Locale決定了vim內(nèi)部處理數(shù)據(jù)的編碼,也就是編碼。
2.文檔編碼和自動(dòng)編碼識(shí)別——這方面涉及到各種編碼規(guī)則,就不詳細(xì)說了。然而,應(yīng)該理解,文件編碼類型不存儲(chǔ)在文件中,也就是說