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

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

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

最新喜欢:

wdlimingwdlimi...
liu
liu
新手上路
新手上路
沙发#
发布于:2018-10-14 10:18
[quote=撸王之王,5887]我也深受其扰。
liu
liu
新手上路
新手上路
板凳#
发布于:2017-11-27 01:50
撸王之王:我也深受其扰。
Insert 模式下用 <C-O>k 使光标上移一行,(切换到临时 Normal 模式,k,再自动返回到 Insert 模式)就要卡两下。
如果录个宏,里面有频繁的 Normal 和 Insert 切换,并且重复次数很多...
回到原帖
liu
liu
新手上路
新手上路
地板#
发布于:2017-10-19 20:01
撸王之王:我也深受其扰。
Insert 模式下用 <C-O>k 使光标上移一行,(切换到临时 Normal 模式,k,再自动返回到 Insert 模式)就要卡两下。
如果录个宏,里面有频繁的 Normal 和 Insert 切换,并且重复次数很多...
回到原帖
liu
liu
新手上路
新手上路
4楼#
发布于:2017-06-20 23:45
撸王之王:看 vim 是否支持 Python3,用
:echo has('python3')
返回 1 则支持,返回 0 不支持。

或者输入
:version
找找看,是支持的
+python3/dyn
还是不支持的
-python3/dyn
回到原帖
终于可以了,感动啊,以前是python多版本问题,一直试不出来。

你的script指令改python3即可,附上我的简单版本。

python3 import vim
python3 import win32api
python3 import win32gui
let g:change_input_method = 0
python3 win32api.PostMessage(win32gui.FindWindow('yong_main', 'main'), 0x474, 1, 1)

function! Insert_leave()
    python3 vim.vars['change_input_method'] = win32api.SendMessage(win32gui.FindWindow('yong_main', 'main'), 0x474, 1, 1)
endfunction

function! Insert_enter()
    if g:change_input_method == 1
        python3 win32api.PostMessage(win32gui.FindWindow('yong_main', 'main'), 0x474, 1, 0)
    endif
endfunction

autocmd InsertLeave * call Insert_leave()
autocmd InsertEnter * call Insert_enter()
5楼#
发布于:2017-06-19 19:56
liu:谢谢你的方法,看起来应该是最快最顺的。我目前只装 python 3.4,目前找不到支援的 vim,目前无法试,改天有空试试。。你自己 compile 的吗?回到原帖
看 vim 是否支持 Python3,用
:echo has('python3')
返回 1 则支持,返回 0 不支持。

或者输入
:version
找找看,是支持的
+python3/dyn
还是不支持的
-python3/dyn
liu
liu
新手上路
新手上路
6楼#
发布于:2017-06-18 23:30
撸王之王:我也深受其扰。
Insert 模式下用 <C-O>k 使光标上移一行,(切换到临时 Normal 模式,k,再自动返回到 Insert 模式)就要卡两下。
如果录个宏,里面有频繁的 Normal 和 Insert 切换,并且重复次数很多...
回到原帖
谢谢你的方法,看起来应该是最快最顺的。我目前只装 python 3.4,目前找不到支援的 vim,目前无法试,改天有空试试。。你自己 compile 的吗?
7楼#
发布于: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)。
这功能有延迟,当然有的时候也会添乱帮倒忙,不过还是利大于弊吧。嫌不好用的话可以删掉那行。
8楼#
发布于:2017-06-14 23:49
yong.exe以管理员执行应该没影响才对,有时间我会查一下。
9楼#
发布于:2017-06-14 23:48
liu:找到问题了,很抱歉是假警报。我的yong.exe用管理员执行,但是yong-vim.exe不是,所以对不上。

顺便问问,不知您有使用 gvim 吗?我一直无法解决yong-vim无视窗化,工作列闪烁的问题。
下面这行,无法改写成无视...
回到原帖
无视窗的话,就无法获得返回值了。yong-vim只能做成一个标准的console程序,否则和vim无法通信。
上一页
游客

返回顶部