Я пытаюсь сделать аббревиатуру vim s, которая, если я наберу "prf" в режиме вставки, напечатает printf(""); и сразу бросает меня обратно в режим вставки, но между двумя кавычками. Я не могу понять, как это сделать ... кто-нибудь может помочь?
3 ответа
Недостатком отображений в режиме вставки является то, что каждый тип p теперь будет отображаться с задержкой в буфере, поскольку Vim должен проверить, должно ли применяться полное отображение prf или нет. Лучше использовать аббревиатуру:
:ia prf printf();<Left><Left>
Опуская " из аббревиатуры, вы можете вызвать это, набрав prf" , и это позволяет избежать проблемы, описанной @Dmitry Alexandrov.
Продвинутый вариант
фрагменты похожи на встроенные :abbreviate на стероидах, обычно с вставками параметров, зеркальным отображением и несколькими остановками внутри них. Одним из первых, очень известных (и до сих пор широко используемых) плагинов Vim является snipMate (вдохновленный редактором TextMate ); к сожалению, это больше не поддерживается; хотя есть вилка. Современная альтернатива (для которой требуется Python) - это UltiSnips. Есть и другие, смотрите этот список в Vim Tips Wiki.
Есть три вещи, которые нужно оценить: во-первых, особенности самого движка сниппета, во-вторых, качество и широта фрагментов, предоставленных автором или другими; в-третьих, как легко добавлять новые фрагменты.
Попробуйте :inoremap prf printf("");<ESC>hhi
Он напечатает printf(""); , выйдите в нормальный (командный) режим (<ESC>), переместитесь влево 2 раза (hh), затем снова войдите в режим вставки (i).
Хотя отображение здесь может быть более подходящим, я отвечу на ваш буквальный вопрос: «Как использовать команды обычного режима в сокращениях?»
На самом деле, вы можете сделать это точно так же, как и команды обычного режима в режиме ввода:
:inoreabbr prf printf("");<Esc>2hi
или же
:inoreabbr prf printf("");<C-o>3h
Недостаток использования аббревиатуры в том, что он обычно расширяется нажатием пробела, и этот пробел не выпадает - он вставляется. Поэтому, набрав prf<space> вы получите:
printf(" ❙");
где ❙ обозначает позицию курсора. Получить
printf("❙");
Вы должны нажать C-] вместо <space> .
