liu
liu
新手上路
新手上路
阅读:7265回复:14

yong-vim.exe 最近有问题吗?

楼主#
更多 发布于:2017-06-14 21:10
今天 yong-vim.exe 切换失效了,今天就是回复到一个月前(还可以用),然后做了 windows 更新。yong-vim.exe 的原理是什么呢?会有影响吗?

最新喜欢:

wdlimingwdlimi...
沙发#
发布于:2017-06-14 21:31
输入法已经有一个月没更新了,yong-vim更久,不认为windows更新对此有什么影响
liu
liu
新手上路
新手上路
板凳#
发布于:2017-06-14 21:49
dgod:输入法已经有一个月没更新了,yong-vim更久,不认为windows更新对此有什么影响回到原帖
我用2016/11/5日的版本的yong.exe覆盖回去,就可以用了。(可能我很久没更新了?我有点忘了)但是更新最新版后,确定是不能用的)
liu
liu
新手上路
新手上路
地板#
发布于:2017-06-14 22:32
dgod:输入法已经有一个月没更新了,yong-vim更久,不认为windows更新对此有什么影响回到原帖
更新。似乎是和新旧版无关。而是重开机后(输入法自动执行)会无法运作。要关闭yong.exe后,再重执行,就可以接受了。
4楼#
发布于:2017-06-14 23:10
liu:更新。似乎是和新旧版无关。而是重开机后(输入法自动执行)会无法运作。要关闭yong.exe后,再重执行,就可以接受了。回到原帖
把各种安全软件退出试试
liu
liu
新手上路
新手上路
5楼#
发布于:2017-06-14 23:38
dgod:把各种安全软件退出试试回到原帖
找到问题了,很抱歉是假警报。我的yong.exe用管理员执行,但是yong-vim.exe不是,所以对不上。

顺便问问,不知您有使用 gvim 吗?我一直无法解决yong-vim无视窗化,工作列闪烁的问题。
下面这行,无法改写成无视窗化,会让切换延迟些。
silent! let g:input_method = system("yong-vim.exe -w -t 2")
6楼#
发布于:2017-06-14 23:48
liu:找到问题了,很抱歉是假警报。我的yong.exe用管理员执行,但是yong-vim.exe不是,所以对不上。

顺便问问,不知您有使用 gvim 吗?我一直无法解决yong-vim无视窗化,工作列闪烁的问题。
下面这行,无法改写成无视...
回到原帖
无视窗的话,就无法获得返回值了。yong-vim只能做成一个标准的console程序,否则和vim无法通信。
7楼#
发布于:2017-06-14 23:49
yong.exe以管理员执行应该没影响才对,有时间我会查一下。
8楼#
发布于:2017-06-15 14:41
我也深受其扰。
Insert 模式下用 <C-O>k 使光标上移一行,(切换到临时 Normal 模式,k,再自动返回到 Insert 模式)就要卡两下。
如果录个宏,里面有频繁的 Normal 和 Insert 切换,并且重复次数很多,简直卡得没法用。

尝试了各种方法,只要是调用外部程序,「焦点」从 gvim 窗口离开再回来,就不可避免的要卡顿一下。
意识到这点,就开始想办法看能不能在 Vim 内部解决。

目前的方案是让 Vim 用 Python 代码,直接做 yong-vim.exe 做的事——给 yong.exe 发送消息。
效果还不错,完全不卡。
代码如下,需要 Vim 支持 Python 2.x。(执行
:echo has('python')
如果返回「1」,则支持。Python 3 行不行我没试,其他语言的自己移植吧。)

python import vim,win32api,win32gui
let g:yong_is_ch = 1
       
function! Yong2en_save()
  python vim.vars['yong_is_ch'] = win32api.SendMessage(win32gui.FindWindow("yong_main","main"), 0x474, 1, 1)
endfunction
       
function! Yong2en()
  python win32api.PostMessage(win32gui.FindWindow("yong_main","main"), 0x474, 1, 1)
endfunction
       
function! Yong2zh()
  if g:yong_is_ch == 1
    python win32api.PostMessage(win32gui.FindWindow("yong_main","main"), 0x474, 1, 0)
  endif
endfunction
       
augroup yong
  autocmd!
  autocmd CursorHold * call Yong2en()
  autocmd InsertLeave * call Yong2en_save()
  autocmd InsertEnter * call Yong2zh()
augroup END
我还比原版的多加了个 CursorHold 自动命令。在 Normal 模式下持续 1 秒钟无操作时执行「切换到英文状态」。
用处在于,在命令行模式(「:」命令、「/」查找等进入的底行模式)输入了汉字,再返回 Normal 模式时,
或者在其他窗口里打完字,再切换回 Vim 窗口时,
等 1 秒钟后会自动切回英文,并把这 1 秒钟内输入进编码框内的按键吐出来给 Vim(需设置 [IM] CNen_commit=1)。
这功能有延迟,当然有的时候也会添乱帮倒忙,不过还是利大于弊吧。嫌不好用的话可以删掉那行。
liu
liu
新手上路
新手上路
9楼#
发布于:2017-06-18 23:30
撸王之王:我也深受其扰。
Insert 模式下用 <C-O>k 使光标上移一行,(切换到临时 Normal 模式,k,再自动返回到 Insert 模式)就要卡两下。
如果录个宏,里面有频繁的 Normal 和 Insert 切换,并且重复次数很多...
回到原帖
谢谢你的方法,看起来应该是最快最顺的。我目前只装 python 3.4,目前找不到支援的 vim,目前无法试,改天有空试试。。你自己 compile 的吗?
上一页
游客

返回顶部