修改IBus输入法以适应Vim编辑

IBus输入法最近似乎比较热,拿来玩玩,挺喜欢的。不过在Vim中编辑时还是有一些不顺的地方。幸运的是IBus的前端是用Python写的,本人也正好在学习Python。稍微修改了下,用起来爽很多了。动态语言的好处是,修改了就能用了,无须编译,酷。

IBus在Vim中编辑的几个问题

  • IBus默认使用了预选词嵌入编辑器输入方式,在Gvim中会出现输入几个字就自动退出编辑状态的情况,SCIM中有一个选项可以取消这种方式,IBus没有配置
  • 当用Ctrl+Space打开输入法时,输入法会保持最后一次的编辑方式,如果最后一次编辑处于英文状态,输入法打开时也是英文状态。这不符合使用习惯,无谓增加了输入法的模式切换。当人们打开输入法时,希望的是马上能输入中文。
  • 当在Vim中用Escape键退出编辑状态时,IBus保持中文编辑方式,妨碍Vim在命令模式下的操作,希望在按下Escape键后输入法切换为英文输入状态。

对IBus的一些小修改

  • 打开 /usr/share/ibus-pinyin/engine/pinyin.py ,找到 update_preedit 函数的定义,在函数体的第一行插入 return ,将该函数屏蔽掉。这样就不会再使用预选词嵌入的方式了。(详细说明请参考:http://blog.pluskid.org/?p=328 )
  • 在上述文件中找到 enable 函数的定义,并在其下添加 self.__mode__ = 1 ,这样在打开输入法时,总是默认为中文输入。
  • 在上述文件中找到 __chinese_mode_process_key_event 函数的定义,并在 elif key.code == keysyms.Escape: 下添加 self.__change_mode() ,这样在Vim中按下Escape键,IBus就从中文输入状态切换到英文输入状态了。

3 Responses to “修改IBus输入法以适应Vim编辑”

  1. jim 说道:

    很是厉害。。

  2. tw 说道:

    在ibus 1.20这个版本中,已经找不到 pinyin.py这个文件,如何是好?

  3. digitalsatori 说道:

    文中所提的方法已经不适用新版的ibus了。
    我推荐你使用vimim
    http://www.vim.org/scripts/script.php?script_id=2506
    , 在vim中输入中文不需要任何输入法,不需要模式切换,很酷的。

Leave a Response