让Mac版Sublime text3的Vintage插件切换命令模式时自动切换到英文输入法

[b]问题:[/b]
sublime text3开启vintage插件(vim键模式)后,按Esc键切换到命令模式后,如果当前输入法是中文,需要再按快捷键切换到英文输入法,才能正常使用命令模式。所以很是麻烦。本文尝试解决这个麻烦。

之前写过针对sublime text2的文章[url]http://bellstar.iteye.com/blog/1671006[/url],本篇的内容应该也适用sublime text2,只是我没有试。这篇的方法比之前的那个更好,它不需要安装别的插件,改别人的插件。但是也需要手动写一个插件,当然,有空的话,能将下面的东西打包成一个独立插件发布最好。

[b]解决:[/b]
我是这样做的:注册escape键,按下时执行run_multiple_commands,这条指令又会执行预定义的subprocess_in_cwd和exit_insert_mode两条指令,其中subprocess_in_cwd会调用外部的changeInputMethod这条指令。(subprocess_in_cwd和exit_insert_mode都是sublime text3自带的命令)。

整个过程是这样的,在插入模式时,按Escape键后,将自动将输入法切换到英文并退出插模式,即进入命令模式。

changeInputMethod是用objective-c实现的,run_multiple_commands是以sublime text3自定义插件的形式实现的,都已包含在附件中。

[b]安装:[/b]
将RunMultipleCommands.py文件copy到sublime text3的packages/user/目录下,将下面键映射的内容加入Default (OSX).sublime-keymap。将changeInputMethod放到/usr/local/bin目录下(如果不在此目录下,需要相应的更改下方配置的参数)


[{
"keys": ["escape"],
"command": "run_multiple_commands",
"context": [{
"key": "setting.command_mode",
"operand": false
}, {
"key": "setting.is_widget",
"operand": false
}],
"args": {
"commands": [
{"command": "subprocess_in_cwd", "args": {"cmd": "/usr/local/bin/changeInputMethod U.S.", "wait": true}, "context": "window"},
{"command": "exit_insert_mode"}
]
}
}]

你可能感兴趣的:(mac,os,osx,sublimetext3,sublimetext2,vim)