
我在用著優質的Sublime Text 2 上的模式(Vi 綁定)。
當切換回 ST2 時,我經常因為仍處於插入模式而被咬,導致我輸入“jjjjjjjjjjkkkkkkkkk”。
當 ST2 視窗失去焦點時,有沒有辦法自動離開插入模式並返回命令模式?
答案1
我從未使用過 Sublime Text 2,但看起來它可能有希望……雖然我的 Vim 不會改變{Grin}
下列應該為你工作,當你失去焦點時關閉插入模式,將其命名為“stop_insert_on_focus_lost.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')
改編自洛尼克斯的答案——修復了一些邊緣情況。為其命名stop_insert_on_focus_lost.py
並將其新增至 下方Packages
。