笔记: gVim同时处理中日韩文


gVim处理unicode时,如果设定不正确,可能会无法显示某些字符。
解决问题的关键,有2点:
一是编码环境,推荐:set enc=utf-8;
二是正确的字体,比如要正确显示韩文可选择GulimChe、DotumChe字体。

我的显示效果,如下图:(Win7、gVim 7.3、2012-11-16)
[img:gvim unicode]

更多说明

0.
多数情况下,我用gvim处理中文,因此,默认enc是prc而非utf-8。临时有需要往往改enc,相对不太关注fenc。[参见]

1.测试文本

日语(にほんご、にっぽんご)朝鲜语(조선어)或称韩国语(한국어)
代码 字符标准名称 显示
A 大写拉丁字母”A” A
ß 小写拉丁字母”Sharp S” ß
þ 小写拉丁字母”Thorn” þ
Δ 大写希腊字母”Delta” Δ
Й 大写斯拉夫字母”Short I” Й
ק 希伯来字母”Qof” ק
م 阿拉伯字母 “Meem” م
๗ 泰文数字 7 ๗
ቐ 埃塞俄比亚音节文字”Qha” ቐ
あ 日语平假名 “A” あ
ア 日语片假名 “A” ア
叶 简体汉字 “叶” 叶
葉 正体汉字 “葉” 葉
엽 韩国音节文字 “Yeob” 엽

2.
中文简体Win XP下,不设定encoding时,相当于cp936: simplified Chinese (Windows only),支持别名prc, chinese。也就是说,中文简体Win XP下,不设定enc与
se enc=prc
se enc=cp936
se enc=chinese
是等同的。

3.
此环境下,保存txt相当于notepad.exe的ansi。

4.
enc=prc下,处理unicode字符能力当然比较弱:默认开一个新文件复制韩文过来,它根本不认识;打开一个utf-8编码多语言的文件,也可能转换出错。

5.
所以,处理unicode字符时,一定要(临时)设为enc=utf-8

6.
直接切换到enc=utf-8,GVIM界面会显示乱码,韩文仍无法显示。前者是GVIM调用资源的问题,后者是当前字体不支持韩文(多数中文字体都支持日文)。
这时,虽显示异常,但不影响实际使用。比如,你仍可以复制/粘贴。

7.
如果看起来不舒服,则可以更改显示字体为韩文(代价是中文丑陋)。
se guifont=* 选择 GulimChe或DotumChe,字符集选韩文(不选似乎也可以)。

8.
曾有一段时间,我倾向于选择utf-8,让它成为gvim的enc、文本文件的保存格式、html的编码格式。
但这种“高”标准化对其他程序并不友好。比如:TC中ctrl+q或F3显示txt文件,进行文件内容比较。另外,对中文而言utf-8编码体积是原默认编码的1.5倍,如果是一篇长网页,差异还是难以忽视的。
因此,后来我又改回了ansi/gb-2312,除非遇到问题,才选择utf-8。

9.
对开发者或应用而言,应支持高标准;对用户或数据而言,采用低标准更为有利。此合于老子“知其雄,守其雌”之道。(完)>


《 “笔记: gVim同时处理中日韩文” 》 有 32 条评论

  1. xbeta你好,我想问问在gvim编辑中文的时候,怎么样才能用方向键在段中控制光标?比如我现在光标在本段开头,按“下”的时候光标就跳到这一段的末尾去了,但是我只想下移一行而已。
    简言之,能实现像term中那种操作吗?

    • 看来你真的是用小键盘的方向键啊。vim用户很少用它们,而是在normal mode下按hjkl代表4个方向移动。这样做的好处是按键更方便,更重要的是60j就成了下移60行(段),就可以用于复杂脚本。这是vim的入门第一课,呵呵。

      希望将来有时间,可以为非专业人士(无编程、无UNIX/Linux/term经验)写一个vim入门系列。

      《普通人的编辑利器——Vim》限于篇幅,很多要点仅是一笔带过,但可以细心阅读的话也能对vim有全面认识。

      • 应该是不能的。
        vim大概认为这种需求是不太合理的。因为行是窗口宽度折出来的概念,很少需要从“A列”B行转到“A列”D行,更可能你的目标是X列Y行。即光标实际的路径需要“斜向”移动,而非“竖直”移动。
        从这种需求来看,Normal模式下的vim提供了非常多样并可灵活组合的移动命令;而在insert模式下我的习惯是用鼠标(实际是ThinkPad的小红帽)。
        当然,vim跳转功能对中文而言不是很好用。

  2. 其实windows/linux平台上unicode编码中 utf16 小尾序兼容性最好
    您老用utf-8在tc中有兼容性问题估计是因为bom没有加上去。反正utf-8有没有bom都很烦的。

      • 晕,不是炸弹……
        utf-16 le中文的话占地比utf-8小,如果全英文则比utf-8大,总体来说和gb18030差不多;兼容性应该是最好的,而且处理起来最快(因为大部分字编码都是等长的,而且新一点的操作系统是原生支持的)

  3. 另外,显示的话其实应该是vim对于字体替换支持不好,本来正常的步骤应该是用默认选择的字体显示,碰上显示不出来的再调用默认的“补充”字体,比如选tahoma显示,碰上中文了,应该用宋体来显示,再碰上了cjk ext-b的字,则用simsun ext-b来显示。这些字体链接在注册表里面都有的,就看程序是否选择遵守了。

      • 不是这个问题。清空cookie后再浏览,主页是桌面版,可一点进某一篇文章就是移动版。应该和User Agent有关,我在opera:config中把ISP填上了自己的博客地址,这样UA就是:Opera/9.62 (Windows NT 6.1; U; welcome to http://jude.appspot.com; en) Presto/2.1.1 可我发现朱雀版的ISP中也有内容,是Edition IBIS,浏览善用佳软就不会跳到移动版,我把它改成自己的博客地址后就得到移动版,而即使我把它改成Nokia 6300,却得到的还是桌面版。

        这个博客插件还真有点诡异。

  4. 我设成这样是可以的:
    set guifont=新宋体:h12:cGB2312
    但有个问题是,光标移到韩文字符后就变成了框框,Ctrl-L一下后又好了

  5. xbeta你好!有个问题请教下,我初装gVim,准备学习。在360上下了个中文版安装。第一次打开显示的是中文,但第二次打开后就成英文的了,请问怎么让其显示为中文界面?

  6. set encoding=utf-8
    set fileencoding=utf-8
    set fileencodings=cp932,cp936,utf-8,ucs-2le
    source $VIMRUNTIME/delmenu.vim
    set langmenu=zh_cn.utf-8
    source $VIMRUNTIME/menu.vim
    language messages zh_CN.UTF-8
    set guifont=MS_Gothic:h14:cANSI
    多数中文字体都支持日文
    代价是多数假名都很丑!难以忍受……这方面没有繁体MingLiU好

发表回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据