vim编码

~/.vimrc配置

setencoding=utf-8

settermencoding=utf-8

setfileencoding=utf-8

setfileencodings=ucs-bom,utf-8,chinese,cp936,gb2312

查看vim编码,在命令模式输入

:setencoding

:setfileencoding即可

Vim和所有的流行文本编辑器一样,Vim可以很好的编辑各种字符编码的文件,这当然包括UCS-2、UTF-8等流行的Unicode编码方式。

Vim有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding(这些选项可能的取值请参考Vim在线帮助:helpencoding-names),它们的意义如下:

(1)encoding:Vim内部使用的字符编码方式,包括Vim的buffer(缓冲区)、菜单文本、消息文本等。用户手册上建议只在.vimrc中改变它的值,事实上似乎也只有在.vimrc中改变它的值才有意义。

(2)fileencoding:Vim中当前编辑的文件的字符编码方式,Vim保存文件时也会将文件保存为这种字符编码方式(不管是否新文件都如此)。

(3)fileencodings:Vim启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将fileencoding设置为最终探测到的字符编码方式。因此最好将Unicode编码方式放到这个列表的最前面,将拉丁语系编码方式latin1放到最后面。

(4)ermencoding:Vim所工作的终端(或者Windows的Console窗口)的字符编码方式。这个选项在Windows下对我们常用的GUI模式的gVim无效,而对Console模式的Vim而言就是Windows控制台的代码页,并且通常我们不需要改变它。

Vim的多字符编码方式支持是如何工作的。

(1)Vim启动,根据.vimrc中设置的encoding的值来设置buffer、菜单文本、消息文的字符编码方式。

(2)读取需要编辑的文件,根据fileencodings中列出的字符编码方式逐一探测该文件编码方式。并设置fileencoding为探测到的,看起来是正确的(注1)字符编码方式。

(3)对比fileencoding和encoding的值,若不同则调用iconv将文件内容转换为encoding所描述的字符编码方式,并且把转换后的内容放到为此文件开辟的buffer里,此时我们就可以开始编辑这个文件了。注意,完成这一步动作需要调用外部的iconv.dll(注2),你需要保证这个文件存在于$VIMRUNTIME或者其他列在PATH环境变量中的目录里。

(4)编辑完成后保存文件时,再次对比fileencoding和encoding的值。若不同,再次调用iconv将即将保存的buffer中的文本转换为fileencoding所描述的字符编码方式,并保存到指定的文件中。同样,这需要调用iconv.dll

由于Unicode能够包含几乎所有的语言的字符,而且Unicode的UTF-8编码方式又是非常具有性价比的编码方式(空间消耗比UCS-2小),因此建议encoding的值设置为utf-8。这么做的另一个理由是encoding设置为utf-8时,Vim自动探测文件的编码方式会更准确(或许这个理由才是主要的;)。我们在中文Windows里编辑的文件,为了兼顾与其他软件的兼容性,文件编码还是设置为GB2312/GBK比较合适,因此fileencoding建议设置为chinese(chinese是个别名,在Unix里表示gb2312,在Windows里表示cp936,也就是GBK的代码页)。

相关推荐