ZSaberLv0 / ZFVimIM

vim输入法 / Vim Input Method by pure vim script, support: user word, dynamic word priority, cloud db files
204 stars 14 forks source link

进入到插入模式后切换到五笔模式,然后回到normal模式,再打开其他窗口,会影响其他窗口的输入 #43

Closed persytry closed 2 years ago

persytry commented 2 years ago

Kapture 2022-04-30 at 22 25 39

  1. 进入到插入模式
  2. 切换到五笔模式
  3. 在保持(不退出)五笔模式的情况下,按esc回到normal模式
  4. 打开其他窗口会影响其他窗口的输入, 我上面演示的例子是打开的CocList outline窗口

希望这个问题能够解决一下,谢谢

persytry commented 2 years ago

coc.nvim已经把我上述的问题解决了,但是还有一个与之相关的问题: Kapture 2022-05-02 at 09 09 02 在非五笔模式下, 在命令行输入CocList outline一切正常,能够显示出正确的符号, 但是在五笔模式下, 会有两处问题:

  1. 当我输入CocList out然后按tab键, 不能把outline自动补全了
  2. 输入CocList outline然后按回车键, 弹出的框中没有任何符号.
ZSaberLv0 commented 2 years ago

https://github.com/ZSaberLv0/ZFVimIM/blob/master/plugin/ZFVimIM_autoDisable.vim#L30

试试去掉 CocEnableCocDisable, 不太确定是否有其他什么问题

persytry commented 2 years ago

谢谢。 当我增加了这一行后

let g:ZFVimIM_autoDisable_coc = 0

我上述的那两个问题确实就不存在了,但是我感觉你之前之所以增加CocEnableCocDisable的功能,应该是有原因的?否则应该会有其他问题,请问是吗?

ZSaberLv0 commented 2 years ago

主要问题是本插件依赖 omnifunclmap, 没法和补全插件共存 (一般用的 TextChangedI)

起作用的主要是 call coc#config('suggest.autoTrigger', 'none'), 但我不太了解 coc 的内部实现

你可以先试试去掉 CocEnableCocDisable 看看是否有其他问题

persytry commented 2 years ago

好的,谢谢,我先这样用着看

persytry commented 2 years ago

对了, 我有个想法不知道可不可行, 就是能不能让本插件只在insert模式下起作用, 当返回到normal模式后, 让本插件所做的影响降到最低呢? 比如可以选择在insert并且是五笔模式下, 可以设置CocDisable, 而从五笔模式下直接回到normal模式后, 把本插件所做的对全局环境有影响的东西全部恢复掉

ZSaberLv0 commented 2 years ago
autocmd InsertEnter * call ZFVimIME_start()
autocmd InsertLeave * call ZFVimIME_stop()
persytry commented 2 years ago
autocmd InsertEnter * call ZFVimIME_start()
autocmd InsertLeave * call ZFVimIME_stop()

我的意思是在插入模式下调用ZFVimIME_start之后, 再按esc返回到normal模式,此时仍然是五笔模式,当let g:ZFVimIM_autoDisable_coc = 1的情况下,此时是没有调用CocEnable的。 就是说,对CocEnableCocDisable的调用能不能仅限于insert且是五笔模式下呢?

ZSaberLv0 commented 2 years ago

没有什么意义, 还可能会引入更多的适配或兼容性问题 如果你有什么特殊需求, 可以自行视情况调用 ZFVimIME_start() / ZFVimIME_stop()

persytry commented 2 years ago

好吧, 其实我的这个思路是想本插件能够减少或缩减对vim全局环境的影响,我把对CocEnable或CocDisable的调用视作对全局环境的影响。 本插件现在是在ZFVimIME_start之后和ZFVimIMEstop之前(可能同时在insert和normal模式下)对全局环境做了一些更改,如果把本插件对全局环境所做的更改或影响仅限于insert模式下,岂不是在缩减本插件的作用范围么?如此一来应该会减少很多意想不到的跟其他插件相冲突的机会吧? 因为我感觉本插件的效果与影响应该只存在于insert模式下,在非insert模式下,本插件所做的全局环境的更改或影响越少越好,越少兼容性越好。 `^_`

ZSaberLv0 commented 2 years ago

试试这个: https://github.com/ZSaberLv0/ZFVimIM/commit/5908a57ebe58964a03ad18981f80a1d3fdd82e34

let g:ZFVimIME_enableOnInsertOnly = 1
persytry commented 2 years ago

谢谢大神, 大神威武!!!

persytry commented 2 years ago

ZFVimIME_enableOnInsertOnly这个全局变量的前缀是不是弄错了? 因为我看你之前的全局变量前缀都是ZFVimIM,而不是ZFVimIME

ZSaberLv0 commented 2 years ago

没错, 和 lmap/iminsert 之类 vim 状态相关的东西, 都以 ZFVimIME 前缀

persytry commented 2 years ago

好的,那我知道了, 简单测试了下, 工作良好