Я пытаюсь сделать аббревиатуру 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>
.