Vim: Как заменить символ под моим курсором ранее выдернутым текстом (более одного раза)?
Скажем, я дернул 3 символа "foo" в свой буфер обмена, используя визуальный select + yank, то есть: "vllly"
Затем я переместил свой курсор на другой символ (позвольте этому символу x) в строке 5, который я хотел бы заменить тем, что я дернул ранее, а именно foo.
Я могу использовать 'p' для вставки foo после x или 'P' для вставки foo до x, но я хочу заменить x на foo.
Я могу использовать 'vp' для замены x с помощью foo, но это работает только один раз, поскольку он оставляет меня с x в моем буфере обмена. Другими словами, если я перейду к следующему появлению x и снова удалю vp, он не заменит его на foo.
Конечно, я мог бы выполнить поиск/замену с помощью: s/x/foo/gc и затем игнорировать все вхождения x, которые я не хочу заменять, но это немного утомительно для ввода, особенно когда все Мне нужно выполнить замену 2 или 3 вхождений x, которые очень близки к моему курсору, но не в одной строке (то есть: строки 2, 3 и 7).
Итак, в настоящее время я использую: 2,7s/x/foo/gc, но мне интересно, есть ли способ переместить мой курсор в x и нажать [insert magic button здесь], чтобы заменить его на foo. И затем я могу перейти к следующему появлению x и снова нажать [волшебную кнопку] и стрелу, он заменил x на foo снова.
Как бы мне не хотелось использовать эту аналогию, представьте, что вы печатаете в блокноте, и вы выбираете 3 символа, нажимаете Ctrl + c, чтобы скопировать их в свой буфер обмена, а затем выделите x и нажмите Ctrl + v, чтобы замените его на foo. Затем вы выделите другой x и снова нажмите Ctrl + v и т.д.
Как это сделать в vim?
Ответы
Ответ 1
Что насчет s<C-r>0
, это можно повторить с помощью .
-
s
удаляет символ под курсором и помещает вас в режим вставки.
-
<C-r>0
вставляет регистр 0, содержащий дерганный текст.
Вы также можете использовать s
и набрать foo
вручную, что также можно повторить с помощью .
Ответ 2
Вставьте из регистра 0 значение v"0p
.
Ответ 3
Скопируйте свой "foo" в другой регистр, например. зарегистрируйтесь:
"ау
Затем визуально выберите символ, который вы хотите заменить, с помощью "foo" и нажмите
"аР
Ответ 4
Это меньше, чем идеально, но если вы держите в названном буфере a
(например, yank с "ay
), вы можете использовать x"aP
. Используйте свою любимую карту, чтобы сделать ее одним нажатием клавиши.
Ответ 5
Мне нужно это так часто, я написал для этого плагин: ReplaceWithRegister.
Этот плагин предлагает команду gr
2-в-одном, которая заменяет текст, охватываемый {motion}, целыми строками или текущим выбором содержимым регистра; старый текст удаляется в регистр черных дыр, т.е. он ушел.