
я используюВинтажрежим (привязки Vi) в Sublime Text 2.
При переключении обратно в ST2 я регулярно сталкиваюсь с проблемой, оставаясь в режиме вставки, в результате чего мне приходится вводить «jjjjjjjjjjjjkkkkkkkk».
Есть ли способ автоматически выйти из режима вставки и вернуться в командный режим, когда окно ST2 теряет фокус?
решение1
Я никогда не пользовался Sublime Text 2, но, похоже, он может быть многообещающим... хотя и не отличается от моего Vim {Улыбка}
СледующееДОЛЖЕНработать для вас, чтобы отключить режим вставки, когда вы теряете фокус, назовите его "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')
Адаптировано из ответа lornix — исправляет некоторые крайние случаи. Назовите его stop_insert_on_focus_lost.py
и добавьте под Packages
.