在vim中编辑不同编码的文件时需要注意的几点
本文讲解了vim在编辑多字节编码文档(中文)时需要了解的一些基础知识。注意不涉及gvim,仅指字符终端下的vim。
vim编码的基本知识:
1、有三个变量:
编码——该选项用于缓冲文本(您正在编辑的文件)、寄存器、Vim脚本文件等。你可以把‘编码’选项想象成设置Vim的内部运行机制。
file encoding——该选项是vim在写入文件时使用的编码类型。
TERM encoding——该选项表示用于输出到客户端终端($ TERM)的编码类型。
2、这三个变量的默认值:
编码——与系统当前的区域设置相同,所以在编辑文件时要考虑当前的区域设置,否则要设置的东西会更多。
Fileencoding——当文件打开时,vim自动识别文件的编码,file encoding是识别的值。如果为空,则在保存文件时使用该编码。如果编码未被修改,则该值为系统的当前区域设置。
term encoding——缺省空值,即输出到终端的内容不进行编码转换。
可以看出,在编辑不同代码的文件时,需要注意的不仅仅是这三个变量,还有三个关键点:系统当前的区域设置、文件本身的代码和自动代码识别、运行vim的客户端使用的代码类型。这三个关键点影响三个变量的设置。
如果有人问:为什么我用vim打开中文文档会出现乱码?
答案是不确定的,原因如上所述。如果不知道这三个关键点和这三个变量的设定值,有乱码是很正常的,没有乱码只是巧合。
我们来看看常见情况下这三个关键点的值,以及这种情况下这三个变量的值:
1、语言环境——目前,大多数Linux系统已经采用utf-8作为默认语言环境,但也可能不是。例如,一些系统使用中文地区zh_CN。GB18030当区域设置为utf-8时,vim启动后编码会设置为utf-8,这是兼容性最好的方式,因为如果使用utf-8进行内部处理,无论外部存储编码是什么,都可以进行无损转换。Locale决定了vim内部处理数据的编码,也就是编码。
2.文档编码和自动编码识别——这方面涉及到各种编码规则,就不详细说了。然而,应该理解,文件编码类型不存储在文件中,也就是说