Comment #1 on issue 235 by
suxp...@gmail.com: vimim 微软双拼不能输入ing问题
http://code.google.com/p/vimim/issues/detail?id=235
抱歉这几天没过来转转,回应迟了。
您最好能先给出您的 vimim 版本,方便确认问题的根源。我现在用的版本是我自己改
过几次的一个,可能跟版本库中的 vimim 不一致,不过双拼部分如果版本库中一直没
有更新的话应该差不多一致。试了下,问题可以重现。
不过目前的 vimim 中,代码的耦合度很高,随处使用的全局变量与脚本变量以及一些
奇异的 tricks 弄得作为 vim 脚本菜鸟级别的我非常无奈,经过若干小时的摸索,终
于算是找到了问题发生的原因:在设置这种双拼时,使用的“有效字符”集是错误
的,——不包含 ';'。
然而想修复这个问题难度也是极大的——在没有全面理解目前 vimim 的双拼处理机制
时。从根本上解决问题的尝试失败了若干次之后,只好先给它稍微打个补丁:
找到 s:vimim_set_frontend() 函数,将 if !empty(s:ui.root) &&
empty(g:vimim_shuangpin) 下面的一行换为:
if cloud =~ 'ms' || cloud =~ 'purple'
let s:valid_keyboard = "[0-9a-z';]"
else
let s:valid_keyboard = s:backend[s:ui.root][s:
ui.im].keycode
endif
这样能够“临时的”解决 ';' 不是有效字符的问题(不过这种方法确实不够优雅);另
外一种可能的思路是,在 s:vimim_im_chinese() 函数中,let shuangpin =
get(split(vimim_cloud,"[.]"),-1) 之后添加
let g:vimim_shuangpin=shuangpin
当然,由于 g:vimim_shuangpin 全局变量的影响范围较大,这种方法“至少”会使得
vim title 显示有些问题,不过也能够解决当前 issue 中 ';' 不是有效字符的问题。
尽管如此,我所用的 vimim 仍然在双拼部分有问题,具体说来,连续的拼音串在选择
部分转换的结果后,未转换部分丢失,不知道您那里是不是。
时间关系,我一直计划的重构版本的 vimim 不知何年何月才能完成,所以……先用各种
补丁将就下吧。 :)