Sublime Text 2 Vintage:焦点丢失时保留插入模式

Sublime Text 2 Vintage:焦点丢失时保留插入模式

我在用着优质的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

相关内容