Замените слово тем, что готово поставить в vi/vim?

Например, у меня есть:

rm -f $(NAME).elf $(name).d

где второе "имя" является опечаткой, а также должно быть "NAME".

Итак, на 'N', я сделал y w, а затем перешел в 'n'.

Я понял, что если я сейчас удалю c w, чтобы изменить его, я буду в режиме вставки, но я подумал, что это хорошо, это только один дополнительный ключ (ESC), а затем я могу просто p исправленная версия.

Но в этом случае p сделал именно то, что сделал бы u, он вернул "имя". Наверное, потому что "старый текст" также загружается в регистр при изменении, чего я не понимал.


Есть ли команда "replace to register", которая может быть применена к слову/букве/etc.?

Ответ 1

после yw на NAME и переместитесь на NAME, вы можете сделать:

viwp

или golf abit: vep

Ответ 2

Мне нужно это так часто, я написал плагин, чтобы упростить и разрешить максимальную скорость: ReplaceWithRegister.

Этот плагин предлагает команду gr 2-в-одном, которая заменяет текст, охватываемый {motion}/текстовым объектом, всей линией (строками) или текущим выбором с содержимым регистра; старый текст удаляется в регистр черных дыр, т.е. он ушел. Он прозрачно обрабатывает множество угловых корпусов и позволяет быстро повторять стандартную команду .. Если вам это не нравится, на его странице есть ссылки на альтернативы.

Ваш пример

С NAME, занесенным в регистр по умолчанию, и курсором на n, просто используйте gre. gr вызывает команду, а e - это движение, которое охватывает весь NAME, подлежащий замене.

Ответ 3

Еще один способ:

ciw<Ctrl-r>0

или

ce<Ctrl-r>0

Это позволит повторять с помощью . без использования какого-либо плагина, как вы упомянули в комментариях, которые вы в настоящее время избегаете.

Ответ 4

Вы можете просто изменить регистр name на gUiw.