Sublime Text 2 Vintage: оставить режим вставки при потере фокуса

Sublime Text 2 Vintage: оставить режим вставки при потере фокуса

я используюВинтажрежим (привязки 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.

Связанный контент