Найти в Дзене
Блокнот математика

Рубрика "Секреты Вим". Полезные привязки в режиме вставки

Привет, коллеги. Продолжаю делиться личным опытом; полезные привязки в нормальном режиме мы уже обсудили, а теперь режим вставки. Привязки в режиме вставки могут быть трех типов. Технически все устроены одинаково, конечно, но для пользователя разница есть. Во-первых, привязанная команда может начинаться с <ESC> и прерывать режим вставки. После этого можно делать что угодно, в том числе и восстановить режим вставки. Если не двигать курсор, пользователь может и не заметить, что режим вставки прерывался. Хотя иногда это важно, например, сеанс вставки считается одной правкой, которую можно целиком отменить или вернуть. Пример: imap <F2> <esc>:w<CR> Во-вторых, есть команда <C-O> (control+o), которая позволяет выполнить одну команду нормального режима (в том числе и :, то есть командная строка доступна), а потом возобновляется режим вставки. Тот же пример: imap <F2> <C-O>:w<CR> В-третьих, можно просто что-то сделать в режиме вставки: ввести тот или иной текст. Кое-что лучше делать через со

Привет, коллеги. Продолжаю делиться личным опытом; полезные привязки в нормальном режиме мы уже обсудили, а теперь режим вставки.

http://cdn-ru.bitrix24.ru/b17281898/landing/0c5/0c55a67b527fa4a66fbff6ee7a5859c2/livejurist_img6_1x.jpg
http://cdn-ru.bitrix24.ru/b17281898/landing/0c5/0c55a67b527fa4a66fbff6ee7a5859c2/livejurist_img6_1x.jpg

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

Во-первых, привязанная команда может начинаться с <ESC> и прерывать режим вставки. После этого можно делать что угодно, в том числе и восстановить режим вставки. Если не двигать курсор, пользователь может и не заметить, что режим вставки прерывался. Хотя иногда это важно, например, сеанс вставки считается одной правкой, которую можно целиком отменить или вернуть.

Пример: imap <F2> <esc>:w<CR>

Во-вторых, есть команда <C-O> (control+o), которая позволяет выполнить одну команду нормального режима (в том числе и :, то есть командная строка доступна), а потом возобновляется режим вставки.

Тот же пример: imap <F2> <C-O>:w<CR>

В-третьих, можно просто что-то сделать в режиме вставки: ввести тот или иной текст. Кое-что лучше делать через сокращения, а что-то — через макросы. Но порой бывает полезно:

imap -- —

Тире вводится через диграф. Можно это и прямо прописать:

imap -- <C-D>-M

У меня таких привязок много: например, 22 повешено на ². Степень "два" чаще нужна, чем 22, хотя в 2022 порой получалось 20² и приходилось исправлять. Напоминаю, что при вводе с паузой, медленно, привязка не срабатывает.

Удобно подстелить соломки там, где часты опечатки. Например, hte отобразить на the. Хотя для этого предназначены сокращения.

Можно навесить команды типа ТеХ на символы с диакритикой, например (конечно, если вы не на ТеХ пишете и диакритики нет в раскладке, но она вам нужна):

:imap \'a á

Символ с диакритикой вставьте через диграф. И можете о нем забыть.

Можно вставлять целые конструкции, что полезно для программирования (но не только для него, длинные обороты встречаются и в текстах):

:imap ;1 do<C-K><CR><CR><C-K><CR><CR>end do<C-K><Up><C-K><Up>

Вводить надо не угловые скобки, а то, что в них написано: control+K, ввод два раза. Это вставит именно код клавиши ввода, как будто она и нажата.
Или проще:

imap ;t the

Секрет в том, чтобы использовать редкие сочетания символов. После точки с запятой почти всегда идет пробел (в обычных текстах), и поэтому сочетания ;1 удобны.

Что работать не будет, так это привязки на русском. Точнее, они будут работать, но только если вы пишете по-русски в системной раскладке.
Если же вы
переключаете раскладку в Вим (что правильно, иначе вам придется переключать системную всякий раз, когда вы выходите в нормальный режим), то яя не распознается: ведь технически вы нажали zz, а Вим (через привязки, кстати) перекодировал. Навесьте команду на zz, и сможете ввести ее как яя.

Это может быть проблемой, поскольку последовательность яя в русском тексте встречается не очень часто ("лишняя"), а вот zz в итальянском — распространена.

Переключать набор привязок при смене раскладки — вот ваш выбор в этом случае.

Можно классифицировать привязки иначе: к вводимым клавишам (как ;1) или к функциональным, которые сами по себе символов не вводят (F2), как вариант сочетания вида control+Q, которые если что-то и вводят, то не то, что вам надо. Третий вариант: перехватить клавиши перемещения курсора (стрелки, BS, Del, Home/End и другие).

Например, вы можете перепрограммировать BS удалять целые слова:

imap <BS> <ESC>dBi

Правда, имейте в виду, что это очень опасная штука! Удалять слова она будет эффективно, а вот восстановить только что введенный и удаленный текст вы не сможете, в пределах одного сеанса вставки она не отслеживает ваши действия.

Есть в Вим автодополнение, по множеству источников. Несколько самых популярных висят на <C-N> в режиме вставки. Но вы можете, например, перенавесить это сочетание на <Tab> (саму табуляцию всегда можно ввести через <C-V><Tab> или навесить на <C-Tab>, например). К тому же сочетания автодополнений из разных источников довольно сложны, и их разумно навесить на что-то более удобное.

Выбирайте, что вам по вкусу, и пользуйтесь!

Научно-популярные каналы на Дзене: путеводитель
Новости популярной науки12 марта 2022