4

Я использую Винтажный режим (привязки Vi) в Sublime Text 2.

Когда я переключаюсь обратно на ST2, меня регулярно укушает, когда я все еще нахожусь в режиме вставки, в результате чего я вхожу в "jjjjjjjjjjjjkkkkkkkkk".

Есть ли способ автоматически выйти из режима вставки и вернуться в командный режим, когда окно ST2 теряет фокус?

3 ответа3

8

Я никогда не использовал 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')
4

Плагин выше, отличный, но страдает от раздражающей ошибки, как упоминалось в других комментариях. Когда вы переключаетесь на что-то вроде меню поиска или всплывающего меню, вы попадаете в командный / обычный режим. Что еще хуже, команды не будут работать полностью корректно, потому что многие команды в винтажном режиме не будут работать во всплывающих окнах, поэтому вы находитесь в худшем положении в обоих мирах.

Эта версия исправляет это:

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')

Спасибо оригинальному ответу за стартовый код!

1

У меня также есть это, чтобы предложить:

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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .