VIMLinux 琐事之123

vim 中文乱码解决方案

2016-08-19  本文已影响42人  2625K

出自: http://www.cnblogs.com/joeyupdo/archive/2013/03/03/2941737.html

在vim中编辑一个中文文本时,有时候看起来有乱码,以前都是修修补补的弄没有乱码了就不管了,这个问题一直都很困扰我。突然想到这个问题,于是想把它给解决掉,在网上查了许久,有很多这方面的资料,但是说得不是很到位,经过了一天的折腾,将vim卸载了很多次,也安装了很多次,并做了一些小测试,今天终于搞定了。

下载

可到http://www.vim.org/下载最新的7.3版本的vim源码。

安装

在编译之前,先要./configure --help查看一下配置选项,
其中这个配置需要加进来:--enable-multibyte Include multibyte editing support

其作用是支持多字节编码,这一步应该是很重要。不然后面的配置貌似没什么用,不知道我说得对不对_

在配置好了以后,自然是常规的:make 、make install了

最后是vimrc的脚本配置了

编辑~/.vimrc文件,加上如下几行:

set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8

即可搞定。

顺便记录一下Vim编码的详细介绍

Vim和所有的流行文本编辑器一样,Vim 可以很好的编辑各种字符编码的文件,这当然包括 UCS-2、UTF-8 等流行的 Unicode 编码方式。
Vim 有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding (这些选项可能的取值请参考 Vim 在线帮助 :help encoding-names),它们的意义如下:

再来记录一下 Vim 的多字符编码方式支持是如何工作的。

(1)Vim 启动,根据 .vimrc 中设置的 encoding 的值来设置 buffer、菜单文本、消息文的字符编码方式。
(2)读取需要编辑的文件,根据 fileencodings 中列出的字符编码方式逐一探测该文件编码方式。并设置 fileencoding 为探测到看起来是正确的 字符编码方式,如果没有找到合适的编码,就用latin-1(ASCII)编码打开。
(3) 对比 fileencoding 和 encoding 的值,若不同则调用 iconv 将文件内容转换为 encoding 所描述的字符编码方式,并且把转换后的内容放到为此文件开辟的 buffer 里,此时我们就可以开始编辑这个文件了。
(4)编辑完成后保存文件时,再次对比 fileencoding 和 encoding 的值。若不同,再次调用 iconv 将即将保存的 buffer 中的文本转换为 fileencoding 所描述的字符编码方式,并保存到指定的文件中。

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

上一篇 下一篇

猜你喜欢

热点阅读