解决 Windows 下 VSCode Vim 输入中文闪烁的问题

首先,看一下输入的效果吧,这里我没有录制 gif,但是,输入法的候选框确实是不闪的,

这个问题呢,可以说得上是由来已久呀。如果是 arch linux 下,kde 的桌面环境下的 fcitx5 输入法在 VSCode 中的表现是没有问题的。Mac 设备的话,我没有,但是它也是有问题的,具体详情可以看这个 issue,

https://github.com/VSCodeVim/Vim/issues/7496

大概就是这个问题,类似的 issue 还有几个,这里就不放了,都不知道晾了多少个月了。

令人疑惑的是,VSCode 或者 VSCode Vim 就是不修复这个 bug。

真是令人头疼呀。

所以就没办法啦,只能自己动手尝试解决啦。最终的解决方案就是影子输入法。嗯,我采取的方法是换输入法。

难道事情就这么简单吗?当然不是。

我是尝试了各种各样的输入法的,最终才锁定了影子输入法的。

一开始,影子输入法有以下几个缺点:

  1. 4k 屏幕下,这个位置会出现严重偏移。这个问题猜测应该是 ahk 自己的获取光标位置的函数问题导致的。

  2. 4k 屏幕下,高分屏的显示效果不行。

  3. 随着输入文字的增多,这个软件占用的内存会不断变大。

  4. 软件一开始启动的时候,第一次打字会有卡顿的现象。

  5. 字体渲染似乎不够锐利。

经过一段时间的努力,最终是得到以下的处理方案:

  • 第一个问题,我们可以把两块显示器的缩放比例调成一致的,比如,我现在两块屏幕的缩放都是 150% 的,那么,这个问题就可以得到解决。这个问题确实是 ahk 官方的问题,这个也是有他们自己的考量。
  • 第二个问题,解决方法同上。
  • 第三个问题,经过更长时间的使用,发现它其实是可以自己整理内存占用的。
  • 第四个问题,这个暂时先将就一下,毕竟第一次之后就会变得异常顺滑。
  • 第五个问题,这个可以通过修改源码来解决,我将源码放入了我的仓库。由于这个输入法的界面是使用 Gdip 来渲染的,所以我的解决思路就是去修改相关函数中的抗锯齿参数。

好吧,到这里其实问题就已经解决了。剩余的就是代码的不断优化了。

之后就是这一段时间的折腾的简单记录。

这一切的缘起是我关于对 VSCode 的全键盘操作的想法。而一旦选择了 VSCode 作为我的主力代码编辑器,那么,其 Vim 下的中文输入就是一个绕不开的问题。

之后开始换输入法。尝试过的输入法有:

  • 微软输入法,这个就不多说了,自带的,可配置的东西不多。
  • 小鹤双拼,小鹤官网下的,这个是使用多多输入法的框架生成的。尝试了小鹤双拼和小鹤音形,最终因为输入法的美观性和是否开源这一个方面以及不能解决 VSCode 的输入问题而放弃。
  • 小狼毫,试过小鹤双拼和自带的全拼,使用的是 GitHub 上的雾凇方案,也是解决不了 VSCode 的中文输入问题。而且,年久失修。
  • 搜狗输入法,在 VSCode 和 VSCode-Insider 表现竟然都不一样,而且,由于 VSCode Vim 的问题,一般的输入法捕捉光标都会出现问题,搜狗输入法也不例外,这就导致了在 VSCode 中输入时输入时,候选框会把光标给盖住。还有一个缺点,它不能够主动控制拼音的是否上屏,我向官方反映了这个问题,然后有加入了官方群反映问题,都不给解决,呵呵。更何况搜狗还是出了名的私自搜集用户隐私和流氓广告。遂弃之。
  • 百度输入法,基本能够解决 VSCode 中文输入的问题,但是,其界面年久失修,尤其是在任务栏的图标,然后就是,它的光标捕也是不行,另外,百度的产品,心得是有多大的人才敢去使用呢?

光标捕捉这一块儿,小狼毫倒是做得不错,但是它在输入的时候,会私自修改光标,并且在光标的右下角添加一个下横线,这就注定了在光标附近无法解决 VSCode 的闪烁问题。

然后又去找其他的开源的输入法,这一块儿能找到的其实不多。于是就聚焦在解决影子输入法的问题上,由于 ahk 是一门脚本语言,学起来和 Python 差不多,所以对于影子输入法这一开源的输入法,如果我想自己定制的话,相对来说是比较容易的。

所以最终是解决了一定的问题。顺带着,我觉得进入了 ahk 这一领域,也向是打开了一扇新的大门。其实为了解决输入法的问题,我最近几天甚至在带着学习 Win32 编程,想着,如果最后实在没有满意的输入法,我就自己使用最底层的 api 来自己实现一个吧。不过,Win32 这一领域的相关材料可谓是真的少呀。而 ahk 此时又有一个优点凸显了出来,那就是它这个脚本语言可以很方便地调用 Win32 的接口,本来这个就是为 Windows 量身定制的嘛。至于 Python,它当然也有封装的库,但是残废,不是这一行的。

最后,再贴一下原来的影子输入法和我微修过的影子输入法仓库:

https://github.com/fanlumaster/YingziIME

这下,难道还不能在 VSCode 中编写一切吗?

对了,我的影子个人词库的来源也是 rime-ice,也就是 rime 的雾凇方案。然后拼音方案则是小鹤双拼。影子输入法也是支持辅助码的。


版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!