DarkMatter in Cyberspace
  • Home
  • Categories
  • Tags
  • Archives

vim输入汉字时输入法与normal mode冲突问题解决方法


使用vim输入汉字有个很麻烦的问题,当使用键退回normal mode后, 输入法会拦截normal mode中的输入,打断正常的书写过程。

例如在汉字状态下按退出到normal mode后, 如果按dd删除一行,输入法会拦截dd,显示dd的备选汉字单词, 只有再按一次回车,才会删除掉这一行。

在Ubuntu上使用搜狗拼音输入法,这个冲突问题没有理想的解决方法, 只能使用Autokey实现一个变通的解决方案。 实现思路是:在使用退出编辑模式时,首先用Ctrl+,开启输入法, 再关闭输入法。 这样就能保证无论使用时输入法是否处于开启状态,这两步后都能保证关闭输入法。 下面是具体实现过程:

首先在搜狗拼音的设置里,将 中英文切换 快捷键设置为 Shift, 切换搜狗拼音输入法快捷键 使用默认的 Ctrl + ,;

然后Autokey里对的行为重新定义。 创建一个新的 Script:

escKey:

keyboard.send_keys('<ctrl>+,')
keyboard.send_keys('<shift><escape>')

其Hotkey设置为. 为了降低系统开销,可以通过设置 Window Filter, 要求此脚本只在console或者编辑器中有效: 将Window Filter设置为[.*terminal.*|atom.*], 即某桌面应用的'Window Class'中带有terminal或者atom就采用自动关闭输入法策略, 例如Gnome terminal:gnome-terminal.Gnome-terminal, Terminator:x-terminal-emulator.X-terminal-emulator, Atom:atom.Atom。

这样在其他应用(例如gedit)中使用键时不执行Autokey脚本。

实验证明,发送组合键一定要用keyboard.send_keys('A+B')的形式, 不能用send_key。

特殊键的写法参考Special Keys, 注意最后一句话:

To combine two keys use a + sign - e.g. to press Control+Esc use +

完整文档请参考Autokey Wiki。

API文档只能下载源码包(autokey-0.90.4.tar.gz), 解压后用浏览器打开doc/scripting/index.html文件。



Published

Nov 27, 2016

Last Updated

Nov 27, 2016

Category

Tech

Tags

  • autokey 2
  • im 3
  • vim 92

Contact

  • Powered by Pelican. Theme: Elegant by Talha Mansoor