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

不知怎么触发了 Omni 补全后就乱套了 #5

Closed hao-lee closed 4 years ago

hao-lee commented 4 years ago

Untitled

如图所示,我也不知道是怎么触发的,这样之后每输入一个字母其实都是在进行补全操作,我的输入不会传递到输入法中。此时如果关闭输入法,再输入就不会有问题。再打开输入法还是有问题。

ZSaberLv0 commented 4 years ago

用了什么补全框架么?

因为是用omnifunc实现的输入法,没法和补全框架混一起用

hao-lee commented 4 years ago

我只用了gtags (和ctags类似) 来实现C语言的自动跳转,看这个补全列表如此详尽,我觉得是 gtags 给提供的信息,但是这个现象是无意间触发的,我在拼音下故意试了下Ctrl-x + Ctrl-O并没有出现问题。我怀疑是不是触发了什么条件把omnifunc覆盖成ccomplete了。我手动改了这个变量感觉现象比较接近,我遇到这问题频率还是挺高的,再出现时我看看这个值到底是多少。

ZSaberLv0 commented 4 years ago

出现问题的时候试试 :verbose set omnifunc? 看是不是被什么改了

hao-lee commented 4 years ago

我找到复现办法了,

  1. vim 命令打开空文件
  2. tabe 新建一个 tab page
  3. 在当前 tab page 上进入 insert 模式,然后用 ;; 进入输入法模式,然后 esc 直接回到 normal 模式
  4. gt 切到另一个 tab page,按 i,进入的是 insert 模式,而不是 INSERT (pinyin),我们手动用 ;; 进入输入法,此时再输入任意字符就会发现不打字,而是提示 E764: Option 'omnifunc' is not set
  5. 此时查看 omnifunc 是空

如果我们第一步打开的是个 .c 文件,那么第5步查看 omnifunc 就是 ccomplete#Complete

如果在出现问题后,手动将 omnifunc 设置为 ZFVimIME_omnifunc,就可以继续用了,只不过状态栏下面仍旧会提示 Omni completion (^O^N^P) match 1 of 10

ZSaberLv0 commented 4 years ago

似乎是 iminsert 状态不同步, 先简单处理了下, 后面考虑 i_CTRL_^ 都替换为直接改 iminsert 算了, 同步状态有点蛋疼

hao-lee commented 4 years ago

厉害,解决了,太效率了!非常感谢!

ZSaberLv0 commented 4 years ago

24b8ffa 改了一些实现方式, 顺便帮忙测测呗 :p

hao-lee commented 4 years ago

迫不及待的更新,我现在每天都在用 😏