
私は使用していますビンテージ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
。