我如何反复搜索&在vim中替换一长串文本?

时间:2011-03-05 22:24:47

标签: vim replace

我知道vim replace命令,其格式如下:

:%s/old/new/gc

但是如果这些字符串中的任何一个很长怎么办?如何使用视觉选择模式,剪贴板或vim寄存器,而不必输入旧/新文本?

5 个答案:

答案 0 :(得分:10)

您可以使用q:打开命令行窗口。这使您可以使用所有vim编辑命令来编辑vim命令行,包括要粘贴的p。因此,您可以将文本复制到寄存器中,将其粘贴到命令行窗口中,然后以这种方式执行。

我最近通过vimcasts发现了这个功能。

答案 1 :(得分:7)

According to the manual,您可以使用 Ctrl + R 将寄存器的内容插入命令行中的当前位置。该手册还声称 Ctrl + Y 将用鼠标突出显示的文本插入命令行。请记住,在X11和其他一些系统中,您还可以使用鼠标中键或终端仿真器中的菜单命令将文本从系统剪贴板粘贴到程序中。

答案 2 :(得分:2)

我认为要避免让你的命令行变得庞大,你可以用它来解决你的问题

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

将“foo”替换为寄存器a中的任何内容。

答案 3 :(得分:1)

如果您尝试使用冗长复杂的搜索模式进行替换,那么这是一个很好的方法:

使用一些测试用例尝试搜索模式并对其进行优化,直到获得所需的模式。我发现incsearch确实有帮助,特别是对于复杂的正则表达式。

然后,您可以使用:%s // new来替换上次搜索的模式的所有实例。

如果您输入了某个模式并希望将其复制出搜索历史记录,则可以使用q/打开一个命令行窗口,其中包含与q:非常类似的最近搜索模式包含最近的命令历史记录。

另一方面,如果您询问如何将文本复制并粘贴到替换命令中:

我在插入模式下编写模式,然后使用"ay"by将搜索和替换放入两个不同的寄存器中,然后使用:%s/<C-R>a/<C-R>b/gc进行替换。 yank命令有很多变化,但是当使用视觉选择时,这个变量也应该自动工作。

如果您要从剪贴板中复制文本,可以使用<C-R>*将其内容粘贴到插入模式中。

答案 4 :(得分:1)

我的.vimrc

中有以下映射
vnoremap <leader>r "ry:%s/^Rr/

所以我在视觉上选择了我要替换的东西,然后点击,r,输入替换并点击返回。如果我想粘贴替换,请在选择要替换的文本之前将其拉出,然后在点击返回之前使用<C-r>"将其粘贴为替换。

注意:要在.vimrc中插入^R,您实际输入<C-v><C-r>