Vim中文乱码问题之这次一定要记下来
Vim无疑是世间最强的编辑器(之一)了,但是强大的代价有时候就是必须要花上更多的功夫来应付。中文的编码问题无疑是中文用户值得一提的一个典型问题了,作为老用户的我为此曾经狠狠的中枪过三次,到了最近这一次,我决定要好好的写下来,为了记忆日渐衰退的自己留下一点方便查找的记录了。
大概七八年前吧,那时候还对Vim不算熟悉,刚从UE转投而来的我,当头就吃了一记闷棍,花了好大的功夫才理解了原来还有用户自己捣鼓好文件编码这回事情,到处查找之后,算是得到了如下的一点知识:
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
set fileencoding=utf-8
set encoding=utf-8
这些配置在网上随便一查,就不难理解:
encoding用来指导Vim理解自己内部处理和显示的缺省编码;
fileencodings则是决定Vim识别文件编码格式的识别序列,应当按照从严格到宽松的角度来摆放;
fileencoding设置文件保存时的编码格式;
于是,在这样一个配置的加持下,我无风无雨的渡过了好几年的Vim使用——正当我志得意满,自以为对Vim已经比较了解的情况下,两年前有次在Linux下Term中使用Vim过程中却遇到了久违的乱码,当我试了好几次都无法解决之后,才终于开始满世界的寻求解决(过程中,甚至萌生过转投其他编辑器的想法),在数次绝望之后终于找到了原因,依赖于「termencoding」这个参数指导的term侧的显示终于的得到了解决,至此我以为万事大吉,甚至把Vimrc都留档备份,准备以后千秋万代了:
set termencoding=gbk
好吧,高潮在后头,就在最近刚刚装了个新机器,英文版的Windows7,Vim7.4——然后,赫然发现方块乱码又出现了!我各种挣扎和搜索,都没有找到原因,再次绝望之际,一篇小小的文章却告诉我,原来我一直以为还是编解码识别导致的问题,实际上却是货真价实的显示问题罢了——英文Windows下的Vim不知道如何显示双倍字符宽度的字体!你必须告诉它:
set gfn=Monaco:h10:cANSI
set gfw=NSimsun:h12
如上,设置了英文字体使用Monaco,中文字体用NSimsun,至此,才彻底搞定了这个问题。
果真,我生有涯而学无涯啊,希望以后不要再折腾这个了……