Всем привет, с Вами еженедельная рубрика "Секреты Вим", и сегодня мы продолжим обсуждать удобства, облегчающие и упрощающие работу. В прошлый раз мы изучили команды семейства map, который позволяют повесить команду на горячую клавишу (F5 и т.п.), сочетание клавиш (Control+Q и т.п.) или последовательность (например, qq). Хотя последнее позволяет использовать редкие короткие сочетания для длинных и частых, для этой цели есть другой инструмент. Это аббревиатуры, или сокращения.
Команда :ab (вообще abbreviate, но можно, как всегда, сократить до abbr или ab) создает сокращение, которое раскрывается, будучи набрано. Например, abbr dblpr double precision. Теперь всегда, когда я наберу dblpr и закончу слово --- запятая, двоеточие, точка, пробел --- получу double precision.
Пример посложнее: abbr eqn \begin{equation}<CR>\end{equation}
А вот попроще: abbr teh the --- исправлять опечатку на лету.
Без аргументов abbr покажет все сокращения, а с одним --- все, что начинаются с этого аргумента.
Есть iab и cab --- для режима вставки и командного, соответственно. Еще unab, iunab, cunab --- чтобы удалить сокращение. Можно удалить все вообще, как и у map: abclear и т.п.
Можно определять и использовать сокращения локально, а можно внести в .vimrc и сделать частью своего окружения.
Отличие от map: если вы повесили на qq что-то через map, то оно и по-русски сработает, так как важно лишь, какую клавишу вы нажали; а ab раскрывает именно текст, так что qq не равно йй.
Удалить сокращение не так просто, потому что оно и в командной строке раскрывается! Так что :unab qq приводит к ошибке "нет такого сокращения", а в истории команд стоит unab 666 (было ab qq 666, допустим). Сдвиньте курсор на начало команды и потом уже давите энтер!
Либо нажмите <C-V> два раза, потом сокращение --- оно раскроется в командной строке, но удалится. Это сочетание, <C-V>, можно использовать также для ввода спецсимволов; например, если вы хотите в правую часть вставить код ESCAPE или CARRIAGE RETURN. Хотя это лучше делать через нотацию угловых скобок: <ESC>, <CR>.
Можно добавить аргумент <buffer>, сделав сокращение локальным для данного файла, и <expr>, чтобы трактовать правую часть как выражение, которое следует вычислить. Все как у map.
Завести сокращения на самые распространенные обороты вашего языка программирования, теха или термины вашей предметной области --- милое дело!
Enjoy!