Как мне многократно искать и заменять длинную строку текста в vim? - PullRequest
2 голосов
/ 06 марта 2011

Мне известна команда vim replace, которая имеет форму, например:

:%s/old/new/gc

Но что, если любая из этих строк длинная?Как я могу использовать что-то вроде режима визуального выбора, буфера обмена или регистров vim вместо необходимости вводить старый / новый текст?

Ответы [ 5 ]

10 голосов
/ 06 марта 2011

Вы можете использовать q:, чтобы вызвать окно командной строки.Это позволяет вам использовать все команды редактирования vim для редактирования командной строки vim, включая p для вставки.Таким образом, вы можете скопировать текст в регистр, вставить его в окно командной строки и выполнить его таким образом.

Недавно я обнаружил эту функцию с помощью vimcasts .

7 голосов
/ 06 марта 2011

В соответствии с руководством , вы можете использовать Ctrl + R , чтобы вставить содержимое регистра в текущую позицию в командной строке.В руководстве также утверждается, что Ctrl + Y вставляет текст, выделенный мышью, в командную строку.Помните, что в X11 и некоторых других системах вы также можете вставить текст в программу из системного буфера обмена, используя среднюю кнопку мыши или команду меню в эмуляторе терминала.

2 голосов
/ 06 марта 2011

Я думаю, чтобы ваша командная строка не была огромной, вы можете использовать ее для решения вашей проблемы

:%s/foo/\=@a/g

Это заменяет "foo" тем, что есть в регистре.

1 голос
/ 09 марта 2011

У меня есть следующее отображение в моем .vimrc

vnoremap <leader>r "ry:%s/^Rr/

Итак, я визуально выбираю вещь, которую хочу заменить, и нажимаю ,r, набираю замену и нажимаю клавишу возврата. Если я хочу вставить замену, я дергаю ее перед выбором текста для замены, а затем использую <C-r>", чтобы вставить ее в качестве замены, прежде чем нажать return.

Примечание: чтобы вставить ^R в ваш .vimrc, вы на самом деле набираете <C-v><C-r>.

1 голос
/ 07 марта 2011

Если вы пытаетесь сделать замену длинным сложным шаблоном поиска, вот хороший способ сделать это:

Попробуйте шаблон поиска, используя несколько тестовых примеров, и уточняйте его, пока не получитешаблон, который вы хотите.Я считаю, incsearch действительно помогает, особенно со сложными регулярными выражениями.

Затем вы можете использовать:% s // new, чтобы заменить все экземпляры последнего найденного шаблона.

Если вы 'Если вы ввели шаблон и хотите скопировать его из истории поиска, вы можете использовать q/, чтобы вызвать окно командной строки, содержащее последние шаблоны поиска, очень похожие на q:, которое содержит недавнюю историю команд.

С другой стороны, если вы спрашиваете о том, как скопировать и вставить текст в команду замены:

Я бы выписал шаблон в режиме вставки и скопировал бы поиск и замену в два разных регистра.используя, скажем, "ay и "by, а затем используйте :%s/<C-R>a/<C-R>b/gc, чтобы сделать замену.Существует много вариантов команды yank, но она также должна работать автоматически при использовании визуального выделения.

Если вы копируете текст из буфера обмена, вы можете использовать <C-R>* для вставки его содержимого.в режиме вставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...