Русская раскладка в NeoVim

Эта заметка – исторический артефакт. Сейчас я перешёл на переключение раскладок в ОС путём нажатия CAPS Lock. Про это в другой заметке. С CAPS Lock безымянный палец быстро привык переключать раскладку в Vim.

Режимы работы в Vim предоставляют основную механику редактора. Одна из проблем, которую я для себя вижу – работа с кириллической раскладкой. Это просто больно. Конечно, эта проблема актуальна только для использования Vim как универсального редактора. Если Вы работаете только с кодом, то латиницы там намного больше.

Vim имеет подготовленные движения и действия практически на любой случай жизни. Они закодированы как латинские символы. А в INSERT режиме мне нужна, к примеру, кириллица. Я могу менять раскладку клавиатуры глобально. Но тогда при переходе из INSERT в NORMAL режим, я не смогу переместиться вверх документа комбинацией gg, удалить слово через dw или сохранить файл на ZZ. Нужно будет опять глобально переключать раскладку.

Это удручает. Я привык переключать раскладку комбинацией WIN + SPACE. Постоянно нажимать эту комбинацию просто неудобно и кажется странным. В прошлом проблемы с постоянным переключением отбивали охоту продолжать работать с Vim.

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

Кто-то предпочитает использовать ALT как модификатор ввода. Даже на глобальном уровне всей системы. Концептуально это может быть удобно, ведь это stateless подход в чистом виде. Не важно какая раскладка сейчас включена. Если не нажата ALT, то вводится латиница.

Это только пример. И клавиша-модификатор может быть другая, и базовая раскладка может быть не латиница, а кириллица. Не разделяю этот подход, особенно на уровне всей системы, так как просто не привык к нему. Возможно подход и удобен.

Ещё один подход – настроить автоматическое исполнение команды для глобального переключения раскладки. Например, можно воспользоваться триггерами перехода между режимами.

Минус в том, что для Wayland подобное решение будет варьироваться от DE к DE, т.к. универсальных аналогов setxkbmap в Wayland просто нет.

Также этот подход приводит к проблеме, когда при повторном входе в INSERT нужно будет опять переключаться с латиницы на кириллицу. Это не кажется мне удобным.

Последний способ, который я пока обкатываю на каждодневной основе – опция keymap. Чтобы попробовать этот подход, достаточно следующих настроек. Доки :help russian-keymap и ответы на StackOverflow станут ориентиром.

:set keymap=russian-jcukenwin
:set iminsert=0
:set imsearch=0

Опция keymap задаст 2-ю раскладку в пару к латинице. Опции iminsert и imsearch зададут латиницу как исходную раскладку в соответствующих режимах.

После применения этих опций переключать раскладку можно локально в Vim комбинацией CTRL + ^ в INSERT или COMMAND режимах. Да, это не так удобно, как привычное глобальное переключение. Тем не менее, у этого подхода есть и однозначные плюсы.

Раскладка будет играть роль только в режимах ввода и Vim будет следить за тем, какая именно раскладка используется сейчас. Если Вы вводили кириллицу в INSERT режиме, затем вышли в NORMAL режим и вернулись обратно в INSERT, то будет вводиться именно кириллица, а не латиница. Это позволяет удобно работать с документами, где очень много кириллицы, но чрезвычайно мало латиницы.

Стоит отдельно отметить, что глобальная раскладка при этом должна оставаться с латиницей, а на кириллицу нужно переключаться уже в самом Vim. Это сначала путает, но вручную переключать раскладку действительно нужно меньше.

Я ещё не знаю насколько этот подход будет удобным. Попробую для себя понять.

Журнал изменений

10 марта 2025 г.: добавил комментарий про архив.

Если Вы хотите обсудить содержание заметки, задать вопросы или предложить изменения, то со мной можно связаться в Telegram