Подтвердить что ты не робот

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?

4b9b3361

Ответ 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}, целыми строками или текущим выбором содержимым регистра; старый текст удаляется в регистр черных дыр, т.е. он ушел.