我在用着优质的Sublime Text 2 上的模式(Vi 绑定)。
当切换回 ST2 时,我经常会因为仍然处于插入模式而受到困扰,导致我输入“jjjjjjjjjjjkkkkkkkkk”。
有没有办法当 ST2 窗口失去焦点时自动退出插入模式并返回到命令模式?
答案1
我从未使用过 Sublime Text 2,但它看起来很有前途……不过不会改变我的 Vim {Grin}
下列应该为您在失去焦点时关闭插入模式,将其命名为“焦点丢失时停止插入.py“并将其放在插件文件夹中的某个位置。
希望它能够起作用,必须扫描 API 和他们的一些示例插件才能获得格式和命令。(虽然之前从未见过 ST2......我能在几分钟内了解他们的 API、Python 和 Vintage 模式并获得积分吗?)
import sublime, sublime_plugin
import os.path
class StopInsertOnFocusLost(sublime_plugin.EventListener):
def on_deactivated(self, view):
view.run_command('exit_insert_mode')
答案2
上面的插件很棒,但是有一个烦人的错误,正如其他评论中提到的那样。当您切换到诸如“查找”菜单或“转到任何内容”弹出窗口之类的东西时,您将处于命令/正常模式。更糟糕的是,命令无法完全正常工作,因为许多老式模式命令无法在弹出窗口中运行,因此您处于两难境地。
此版本修复了以下问题:
import sublime, sublime_plugin
import os.path
class StopInsertOnFocusLost(sublime_plugin.EventListener):
def on_deactivated(self, view):
view.run_command('exit_insert_mode')
def on_activated(self, view):
if view.settings().get('is_widget') == True:
view.run_command('enter_insert_mode')
感谢原始答案提供的起始代码!
答案3
我还可以为您提供以下建议:
import sublime, sublime_plugin
import os.path
class StopInsertOnFocusLost(sublime_plugin.EventListener):
def on_deactivated(self, view):
if view.file_name() and not view.settings().get('command_mode'):
view.run_command('exit_insert_mode')
改编自 lornix 的回答——修复了一些极端情况。命名stop_insert_on_focus_lost.py
并添加到 下Packages
。