Упрощаем работу с русскими текстами в Sublime Text 3 + Vintage

    Если вы недавно начали: 1) пользоваться Sublime Text и/или 2) пользоваться плагином Vintage и/или 3) редактировать много текста на русском (или наоборот английском) языке с использованием ST3+Vintage, то скорее всего уже почувствовали какая боль связана с командами назначенными на символы пунктуации — "$", ";", ".", ",", """ и т.п. В небольшой заметке под катом я хочу предложить вам пару костылей, которые помогают эту боль в значительной степени облегчить.


    Возможно вы не знали, что значительной частью плагина Vintage является пачка биндингов стандартных Vim-овых команд на их реализацию в плагине, например:


      { "keys": [";"], "command": "set_repeat_move_to_character_motion",
        "context": [{"key": "setting.command_mode"}]
      },

    Так вот у обозначенной выше проблемы, корни лежат в том, что данный биндинг не знает, была ли нажата клавиша 4/$/; (и надо выполнить "в конец строки") или ;/ж/: (и надо выполнить "повторить поиск символа"). То есть фактически биндинг не знает текущую раскладку. Если бы плагину можно было подсказать текущую раскладку, то всё бы замечательно.


    И оказывается, что сделать эту подсказку возможно — для этого у биндингов есть "context", который может смотреть в сеттинги:


    {"key": "setting.is_rus"}

    С помощью этого трюка мы можем поменять поведение символа ";" на "в конец строки" только в том случае, если настройка "is_rus" выставлена в true:


      { "keys": [";"], "command": "set_motion", "args": {
        "motion": "vi_move_to_hard_eol",
        "motion_args": {"repeat": 1, "extend": true},
        "inclusive": true,
        "clip_to_line": true },
        "context": [{"key": "setting.command_mode"},{"key": "setting.is_rus"}]
      }

    К сожалению это решение не идеально — если вы редактируете файл где примерно равное количество текста на русском и английском языках, то один из языков в любом случае будет страдать. Более того, если вы хотя бы раз в полчаса переключаетесь между файлами на разных языках, то каждый раз лазить в настройки тоже не очень удобно.


    Конечно, мне бы хотелось показать вам ещё пару строк, которые бы автоматически смотрели на системную раскладку и проставляли бы значение "is_rus". Но сейчас я не знаю как это сделать — возможно позже я с этим разберусь и обязательно поделюсь результатами.


    Но всё-таки у меня есть для вас второй костыль, который позволяет и эту боль в значительной степени облегчить. Он базируется на команде "toggle_setting", которая позволяет переключить заданный булевый сеттинг, и которую мы повесим на F8:


     { "keys": ["f8"], "command": "toggle_setting", "args": {"setting": "is_rus"} }

    В итоге предлагается примерно следущий способ работы: пишем код, спотыкаемся на одной из команд, матюгаемся, жмём F8, работаем спокойно. Через полчаса начинаем писать статью на хабр, спотыкаемся на одной из команд, матюгаемся, жмём F8, дописываем статью спокойно.


    В качестве базы поделюсь с вами биндингами, о которые успел споткнутся после открытия этого набора костылей:


      { "keys": ["\"", "<character>"], "command": "vi_replay_macro",
        "context": [{"key": "setting.command_mode"},{"key": "setting.is_rus"}]
      },
      { "keys": [";"], "command": "set_motion", "args": {
        "motion": "vi_move_to_hard_eol",
        "motion_args": {"repeat": 1, "extend": true},
        "inclusive": true,
        "clip_to_line": true },
        "context": [{"key": "setting.command_mode"},{"key": "setting.is_rus"}]
      },
      { "keys": ["."], "command": "show_panel", "args":
        {
          "panel": "incremental_find",
          "select_text": false,
          "reverse": false
        },
        "context": [{"key": "setting.command_mode"},{"key": "setting.is_rus"}]
      }

    Если кто-то может предложить более удачный вариант решения этой проблемы — расскажите пожалуйста в комментах.


    P.S. Готовый конфиг с биндингами русских символов

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 0

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое