Как стать автором
Обновить

Vim и кириллица: парочка приёмов

Время на прочтение2 мин
Количество просмотров56K
image

Раньше для редактирования обычных русскоязычных текстов, я обычно откладывал Vim в сторонку и прибегал к помощи других редакторов. Причиной этому была парочка очень неприятных косяков:
  1. На каждый чих приходилось сто раз переключать раскладку, чтобы корректно ввести пару команд и вернуться обратно. Например, замена буквы-опечатки в только что написанном слове, выливалось в: switch → добраться до буквы, нажать r → switch → [нужная буква] → switch → A → [пишем дальше]. Ад!
  2. Штатный spell checker букву «ё» не любил и любое слово с её участием предлагал заменить на аналог через «е». А я ё люблю, меня это расстраивало.

И вот, наконец, я нашёл решение обеим проблемам. Сижу сейчас и набираю этот текст в Vim. Любопытно, что оба барьера обходятся штатными средствами, без дополнительных плагинов. Поскольку материалов на английском и на них основанных куда больше чем исконно русских, найти эту информацию мне было не просто. Поэтому хочу поделиться ей с теми кому интересно.

Переключение раскладки


Я много раз встречался с предложением перемапить символы кириллицы на латинские буквы вроде такого:

map й q
map ц w
map у e
map к r
map е t
map н y
" ... и т.д.

Это решение мне не нравилось из-за того, что оно оставляло несколько проблем. Например, нельзя перемаппить пунктуацию, поэтому двоеточие и слэш на русской раскладке в любом случае переезжают на новые места. Также в режиме вставки нельзя воспользоваться комбинациями вроде Ctrl+W или Ctrl+R. Всё это раздражало.

Нужно другое решение и оно нашлось! В .vimrc:

set keymap=russian-jcukenwin
set iminsert=0
set imsearch=0
highlight lCursor guifg=NONE guibg=Cyan

Теперь разъяснения. В Vim есть такая штука, как lmap. Она задаёт преобразование для всех случаев, когда речь идёт о вводе символов, как части текста, но не как части команды. Так lmap учитывается при вставке, вводе паттерна поиска, после команд r и f.

Команда «set keymap=russian-jcukenwin» устанавливает кучу таких lmap, которые соответствуют обычной виндовой йцукен клавиатуре. russian-jcukenwin — это просто имя файла с маппингами. Нужный нам уже есть в стандартной поставке.

После установки keymap можно переключаться между кириллицей и латиницей нажатием Ctrl+^. При этом происходит чего и добивались: команды и шорткаты ни коем образом не страдают при активной русской раскладке. Ура!

Сброс iminsert и imsearch необходим, чтобы самый первый раз вставка и ввод паттерна поиска начались с латиницы. По сути, Ctrl+^ переключает эти значения между 0 и 1.

Последняя строка обеспечивает изменение цвета курсора на голубенький, когда включена альтернативная раскладка. То есть кириллица в нашем случае. Очень удобно.

Буква Ё


Предложения не умничать и печатать через «е» или добавлять слова через «ё» в словарь дополнений по ходу работы мне так же не понравились. Нужно было другое решение и оно было под ногами!

:setlocal spell spelllang=ru_yo,en_us

…вместо везде пропагандируемого

:setlocal spell spelllang=ru_ru,en_us

…просит Vim использовать словарь со словами через «ё». А это именно то, что нужно. После этой команды ]s и [s больше не спотыкаются об каждую «ё».

Всё, теперь остальные редакторы не нужны. Всем спасибо. Надеюсь, окажется полезным.
Теги:
Хабы:
Всего голосов 111: ↑102 и ↓9+93
Комментарии95

Публикации

Истории

Ближайшие события

One day offer от ВСК
Дата16 – 17 мая
Время09:00 – 18:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область