1

Я пытаюсь сделать аббревиатуру vim s, которая, если я наберу "prf" в режиме вставки, напечатает printf(""); и сразу бросает меня обратно в режим вставки, но между двумя кавычками. Я не могу понять, как это сделать ... кто-нибудь может помочь?

3 ответа3

4

Недостатком отображений в режиме вставки является то, что каждый тип p теперь будет отображаться с задержкой в буфере, поскольку Vim должен проверить, должно ли применяться полное отображение prf или нет. Лучше использовать аббревиатуру:

:ia prf printf();<Left><Left>

Опуская " из аббревиатуры, вы можете вызвать это, набрав prf" , и это позволяет избежать проблемы, описанной @Dmitry Alexandrov.

Продвинутый вариант

фрагменты похожи на встроенные :abbreviate на стероидах, обычно с вставками параметров, зеркальным отображением и несколькими остановками внутри них. Одним из первых, очень известных (и до сих пор широко используемых) плагинов Vim является snipMate (вдохновленный редактором TextMate ); к сожалению, это больше не поддерживается; хотя есть вилка. Современная альтернатива (для которой требуется Python) - это UltiSnips. Есть и другие, смотрите этот список в Vim Tips Wiki.

Есть три вещи, которые нужно оценить: во-первых, особенности самого движка сниппета, во-вторых, качество и широта фрагментов, предоставленных автором или другими; в-третьих, как легко добавлять новые фрагменты.

2

Попробуйте :inoremap prf printf("");<ESC>hhi

Он напечатает printf(""); , выйдите в нормальный (командный) режим (<ESC>), переместитесь влево 2 раза (hh), затем снова войдите в режим вставки (i).

1

Хотя отображение здесь может быть более подходящим, я отвечу на ваш буквальный вопрос: «Как использовать команды обычного режима в сокращениях?»

На самом деле, вы можете сделать это точно так же, как и команды обычного режима в режиме ввода:

:inoreabbr prf printf("");<Esc>2hi

или же

:inoreabbr prf printf("");<C-o>3h

Недостаток использования аббревиатуры в том, что он обычно расширяется нажатием пробела, и этот пробел не выпадает - он вставляется. Поэтому, набрав prf<space> вы получите:

printf(" ❙");

где обозначает позицию курсора. Получить

printf("❙");

Вы должны нажать C-] вместо <space> .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .