在 Linux 上,常见的情况是环境的内部编码使用 UTF-8 ,而 UTF-8 可以同任何一种语言编码作无损转换,这就保证了系统的多语言处理能力。Vim 这方面秉承了 Unix/Linux 的传统,在内部编码使 UTF-8 的时候,可以同时处理不同意语言编码的文件。
以下列出了和语言编码的相关的设置:
环境变量 LANG(所有语言变量的默认值);
环境变量 LC_CTYPE(使用的内部编码);
环境变量 LANGUAGE(界面语言)
Vim 选项 encoding(Vim 的内部编码);
Vim 选项 termencoding(Vim 在与屏幕/键盘交互时使用的编码);
Vim 选项 fileencoding(Vim 当前编辑的文件在存储时的编码);
Vim 选项 fileencodings(Vim 打开文件时的尝试使用的编码);
Vim 选项 ambiwidth(“不明宽度”字符的处理方式);
如果按照目前 Linux 下的惯例,内部编码一律使用 UTF-8 的话,会有一些额外的好处,其中之一就是在这种情况下 Vim 支持同时编辑多种不同编码的文件,如简体中文和繁体中文。这样,众多关于语言编码的 Vim 选项就有了用武之地了。下面进一步说明一下这些选项和推荐设定(如果适用的话):encoding=utf-8:不管文件的编码如何,不管如何显示和输入,Vim 内部使用的编码是 UTF-8;这是国际化支持的基础。
termencoding:取决于实际的终端或 X Window 的设定。举例来说,如果选择语言简体中文登录到 X Window,或者正在使用 CXTERM [10] 的话,那么该选项应被设为 GB2312;如果使用缺省的语言(LANG=en_US.UTF-8)登录到 X Window,该选项就应该设为 utf-8。从 Windows 下使用 PuTTY 远程连接 Linux 的请特别注意,测试表明,仅在使用 UTF-8 的情况下,PuTTY 才能可靠地支持中文的显示和输入(显示字体必须设成中文字体)。
fileencoding:文件载入时,该选项被置为 Vim 认定的文件编码,因此,存储时文件的编码不会改变。此处和下面 fileencodings 可使用的编码为 libiconv 支持的所有几百种编码(如果编译时包含了 iconv 特性的话),与中文相关的有 gb2312、gbk、gb18030、hz-gb-2312、iso-2022-cn、big5、cp936、cp950 等。如果创建新文件,你又不希望使用 UTF-8 作为文件编码时,那么,你可能需要手工设定该选项,如“:set fileencoding=gb2312”。需要注意的一点是,使用“set”来设定该选项的话会改变以后新建文件的缺省编码,而使用“setlocal”的话则只影响当前文件(参考“:help setlocal”)。
fileencodings=ucs-bom,utf-8,chinese:Vim 会首先判断文件的开头是否是一个 Unicode [7] 的 BOM(byte order mark)字符 [8],是的话则把文件的其余内容解释成相应的 Unicode 序列;否的话再试图把文件内容解释成 UTF-8 的序列;再失败的话,则把文件解释为简体中文(chinese 是一个跨平台的简体中文字符集的别名,Linux 下相当于 gb2312 和 euc-cn;此处也可以根据需要以 gb2312、gbk 或 gb18030 等编码替代)。需要注意的是,该顺序不能颠倒,并且在后面再添加其它编码如 big5、latin1 也是没有意义的,因为 Vim 不能识别 8 比特编码中的错误,因此这些编码后列的编码永远不会被用到。
ambiwidth=double:把所有的“不明宽度”字符 [9]——指的是在 Unicode 字符集中某些同时在东西方语言中使用的字符,如省略号、破折号、书名号和全角引号,在西方文字中通常字符宽度等同于普通 ASCII 字符,而在东方文字中通常字符宽度等同于两倍的普通 ASCII 字符,因而其宽度“不明”——的宽度置为双倍字符宽度(中文字符宽度)。此数值只在 encoding 设为 utf-8 或某一 Unicode 编码时才有效。需要额外注意的是,如果你通过终端使用 Vim 的话,需要令终端也将这些字符显示为双宽度。
需要设定的选项通常放在用户的 Vim 资源配置文件中,即在 ~/.vimrc 文件中加入:
set encoding=utf-8 set fileencoding=chinese set fileencodings=ucs-bom,utf-8,chinese set ambiwidth=double |
在使用内部编码 UTF-8 的情况下,如需编辑 fileencodings 之外(其不能自动识别)的文件,则可以使用以下命令:“:e ++enc=编码 文件名”。详情可参考“:help ++enc”。
关于系统的环境设置详见:http://blog.csdn.net/xinhanggebuguake/article/details/8627857
关于VIM的编码选项的关系可表述如下图:
修改自:http://www.ibm.com/developerworks/cn/linux/l-tip-vim1/index.html