Issue 235 in vimim: vimim 微软双拼不能输入ing问题

17 views
Skip to first unread message

vi...@googlecode.com

unread,
Jul 8, 2013, 5:59:57 AM7/8/13
to vi...@googlegroups.com
Status: New
Owner: ----
Labels: Type-Defect Priority-Medium

New issue 235 by caizhenh...@gmail.com: vimim 微软双拼不能输入ing问题
http://code.google.com/p/vimim/issues/detail?id=235

我vimim中设置
let g:vimim_cloud = 'qq.shuangpin.ms'
然后打字想输入“英文”,敲“y;wf”不能打出来,直接跳过输出第二个字。
我不想用
let g:vimim_shuangpin = 'ms'
因为这种方式出字会很慢,我猜是因为本地进行了一次转码,而前者没有。
请问能解决吗?




--
You received this message because this project is configured to send all
issue notifications to this address.
You may adjust your notification preferences at:
https://code.google.com/hosting/settings

vi...@googlecode.com

unread,
Jul 14, 2013, 10:23:41 PM7/14/13
to vi...@googlegroups.com

Comment #2 on issue 235 by caizhenh...@gmail.com: vimim 微软双拼不能输入
ing问题
http://code.google.com/p/vimim/issues/detail?id=235

谢谢你能来回复我的问题,我用了第一个方案,问题似乎已经解决了。
以下是我的版本信息:
日期:公元2013年7月15日 星期一
電腦:unix 0.006881 seconds
版本:gvim=704
編碼:utf-8 ucs-bom,utf-8,default,latin1
環境:zh_CN.UTF-8
詞庫:雲詞庫:QQ雲 百度雲 搜狗雲 谷歌雲 
聯網:Python2 Interface to Vim
輸入:VimIM  QQ雲 微軟雙拼 
選項:vimimrc
:let g:vimim_cloud = 'qq.shuangpin.ms'
:let g:vimim_map = 'no-gi'
" :let g:vimim_mode = 'dynamic'
" :let g:vimim_mycloud = 0
" :let g:vimim_plugin
= '/home/cauchy2/Dropbox/applications/ubuntu_vim/.vim/plugin'
" :let g:vimim_punctuation = 2
" :let g:vimim_shuangpin = 0
" :let g:vimim_toggle = 'qq,baidu,sogou,google'
 
再次表示感谢。

vi...@googlecode.com

unread,
Jul 14, 2013, 10:30:09 PM7/14/13
to vi...@googlegroups.com

Comment #3 on issue 235 by caizhenh...@gmail.com: vimim 微软双拼不能输入
ing问题
http://code.google.com/p/vimim/issues/detail?id=235

谢谢您能来回复我的问题,我用了第一个方案,原有问题似乎已经解决了。
以下是我的版本信息:
日期:公元2013年7月15日 星期一
電腦:unix 0.006881 seconds
版本:gvim=704
編碼:utf-8 ucs-bom,utf-8,default,latin1
環境:zh_CN.UTF-8
詞庫:雲詞庫:QQ雲 百度雲 搜狗雲 谷歌雲 
聯網:Python2 Interface to Vim
輸入:VimIM  QQ雲 微軟雙拼 
選項:vimimrc
:let g:vimim_cloud = 'qq.shuangpin.ms'
:let g:vimim_map = 'no-gi'
" :let g:vimim_mode = 'dynamic'
" :let g:vimim_mycloud = 0
" :let g:vimim_plugin
= '/home/cauchy2/Dropbox/applications/ubuntu_vim/.vim/plugin'
" :let g:vimim_punctuation = 2
" :let g:vimim_shuangpin = 0
" :let g:vimim_toggle = 'qq,baidu,sogou,google'
 
连续的拼音串在选择部分转换的结果后,未转换部分的确丢失了,不知还能否解决?
再次对您提供的帮助表示感谢。

vi...@googlecode.com

unread,
Jul 15, 2013, 10:01:06 AM7/15/13
to vi...@googlegroups.com

Comment #4 on issue 235 by suxp...@gmail.com: vimim 微软双拼不能输入ing问题
http://code.google.com/p/vimim/issues/detail?id=235

嗯,抽空又翻了下 qq 双拼的处理部分。之前因为 Google 云接口改变的原因,在解
决 issue 234 时顺手将里面的返回串部分稍作改动,充分利用云返回的结果(而不去
自己处理,当时是为了解决很久之前提到的类似 yiqiezhengchang 等的转换错误,不
过那个错误没在这个部分,把那句不知道在处理什么内容的 `let chinese .=
empty(tail) || tail == "'" ? '' : tail` 注释掉就没有那几个错误了),因为 qq
的双拼返回结果也给了匹配长度,所以借鉴过来并不难改,——将
s:vimim_get_cloud_qq 函数中,最后部分的
if vimim_cloud !~ 'wubi' && vimim_cloud !~ 'shuangpin'
let results = s:vimim_cloud_pinyin(a:keyboard, results)
endif
改为
if vimim_cloud !~ 'wubi'
let text = output_hash['q']
let matched = output_hash['rsn']
call map(results, 'v:val . text[ matched[v:key] : ]')
endif
似乎能够解决这个问题,请测试。

vi...@googlecode.com

unread,
Jul 15, 2013, 8:33:21 PM7/15/13
to vi...@googlegroups.com

Comment #5 on issue 235 by caizhenh...@gmail.com: vimim 微软双拼不能输入
ing问题
http://code.google.com/p/vimim/issues/detail?id=235

太棒了,真的解决了。
不过如果这插件以后不更新了真让人觉得可惜。
衷心期待新版。

vi...@googlecode.com

unread,
Jul 14, 2013, 8:06:41 AM7/14/13
to vi...@googlegroups.com

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 不知何年何月才能完成,所以……先用各种
补丁将就下吧。 :)
Reply all
Reply to author
Forward
0 new messages