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

一个奇怪的bug #18

Closed hao-lee closed 3 years ago

hao-lee commented 4 years ago

我的vim是配置了YCM的,写C时使用的补全函数是 ccomplete,切成输入法就是ZFVimIME_omnifunc,一般不会出问题,但是还是会偶尔遇到问题,这问题由来已久,我一直没报就是想找找复现步骤,但是我失败了,只能描述一下现象。

问题发生时状态栏显示当前的模式为-- INSERT (lang) --,当我按下键进行输入时,状态栏显示=ZFVimIME_callOmni(),然后C语言函数补全列表就弹出来了,此时查看omnifunc的值是ccomplete。如果我手动将omnifunc改回去,那就可以继续用。不晓得这是个什么问题。

ZSaberLv0 commented 4 years ago

verbose set omnifunc? 看看是被哪里改动了

hao-lee commented 3 years ago

改动者是 /usr/share/vim/vim82/ftplugin/c.vim

" Set completion with CTRL-X CTRL-O to autoloaded function.
if exists('&ofu')
  setlocal ofu=ccomplete#Complete
endif

有什么解决办法没...

ZSaberLv0 commented 3 years ago

我这边不会出现, 你可以先用这个处理一下, 有空我再研究下有什么好方法

augroup XXX
    autocmd!
    autocmd FileType *
                \  if ZFVimIME_started()
                \|     setlocal omnifunc=
                \| endif
augroup END
hao-lee commented 3 years ago

好的,多谢,这个问题很诡异的,摸不清复现步骤,但是我感觉问题出现一般是我开了多个标签,然后在里面快速的切来切去时,然后停在某个标签里开始打字,就有可能出现这个问题,每当问题发生时我的光标处会被插入ZFVimIME_callOmni这样的文本。

ZSaberLv0 commented 3 years ago

提交了个东西, 你更新下试试? 懒得装 ycm 验证了

因为 lmap 是 buffer local 的, 所以 buffer 切换的时候自动开关了一次, 来确保输入状态和全局同步 然后又因为 b:keymap_name 需要延迟才能更新, 之前偷懒就直接延迟来重启了, 可能和这个延迟有关系

hao-lee commented 3 years ago

好的,多谢,我用几天不出现问题就来反馈