Sublime Text 2をvintageモード(viっぽいモード)で使っている際、日本語コメントを入力し終えてからEscでコマンドモードに戻ってもIMEがONのままのため即座に移動その他が出来ず微妙にストレスがマッハなので改善を試みた。
##前準備
キー送信をエミュレートして実現するので、押すたびにIMEがON/OFFで切り替わるキーではなく、押すと常にIME OFFになるキーを一つ用意する。
Google日本語入力だったら、Properties > General > Customize > EditからCommandがDeactivate IMEになるキーを登録。自分は常に"無変換"キーを押すとIMEがOFFになるようMode毎に六個登録している。
##手順
%APPDATA%\Sublime Text 2\Packages\Vintage\vintage.pyに
class ExitInsertMode(sublime_plugin.TextCommand):
def run_(self, args):
edit = self.view.begin_edit(self.name(), args)
try:
self.run(edit)
finally:
self.view.end_edit(edit)
# Call after end_edit(), to ensure the final entry in the glued undo
# group is 'exit_insert_mode'.
self.view.run_command('glue_marked_undo_groups')
という部分があるので、ここに二行追加して
class ExitInsertMode(sublime_plugin.TextCommand):
def run_(self, args):
edit = self.view.begin_edit(self.name(), args)
try:
self.run(edit)
finally:
self.view.end_edit(edit)
# Call after end_edit(), to ensure the final entry in the glued undo
# group is 'exit_insert_mode'.
import ctypes
ctypes.windll.user32.keybd_event(29, 0, 0, 0)
self.view.run_command('glue_marked_undo_groups')
とする。'29'は'無変換'キーのコードなので、それ以外のキーを登録した場合は適宜変更。
変更してセーブするとすぐ有効になります。
本当はpluginを作ってrun_commandを乗っ取ったり? するのが良いのかなぁ、と思ったけどやり方が分からなかったのと、取りあえず動くようなので。