Sublime Text 2 Vintage: フォーカスが失われたときに挿入モードのままにする

Sublime Text 2 Vintage: フォーカスが失われたときに挿入モードのままにする

私は使用していますビンテージSublime Text 2 のモード (Vi バインディング)。

ST2 に戻すと、挿入モードのままになっているために頻繁に問題が発生し、「jjjjjjjjjjjjkkkkkkkkk」と入力することになります。

ST2 ウィンドウがフォーカスを失ったときに、挿入モードを自動的に終了してコマンド モードに戻る方法はありますか?

答え1

Sublime Text 2 は使ったことがありませんが、有望なようです...ただし、Vim からは変わりません {笑}

次のすべきフォーカスを失ったときに挿入モードをオフにするには、「フォーカスが失われたときに挿入を停止します。」と入力し、プラグイン フォルダ内のどこかに配置します。

うまくいけば、うまくいくでしょう。フォーマットとコマンドを取得するには、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

関連情報