如何重复搜索&;替换vim中的长文本字符串?

如何重复搜索&;替换vim中的长文本字符串?,vim,replace,Vim,Replace,我知道vim replace命令的形式如下: :%s/old/new/gc 但是如果这两个字符串中有一个是长的呢?如何使用诸如视觉选择模式、剪贴板或vim寄存器之类的功能,而不必键入旧/新文本?,您可以使用Ctrl+R将寄存器的内容插入命令行中的当前位置。该手册还声称,Ctrl+Y将鼠标高亮显示的文本插入命令行。请记住,在X11和其他一些系统中,您还可以使用鼠标中键或终端仿真器中的菜单命令将文本从系统剪贴板粘贴到程序中。您可以使用q:打开命令行窗口。这允许您使用所有vim编辑命令来编辑vim命

我知道vim replace命令的形式如下:

:%s/old/new/gc

但是如果这两个字符串中有一个是长的呢?如何使用诸如视觉选择模式、剪贴板或vim寄存器之类的功能,而不必键入旧/新文本?

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

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


我最近通过发现了此功能。

我认为为了避免命令行太大,您可以使用此功能来解决问题

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

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

如果您试图用长而复杂的搜索模式进行替换,下面是一个很好的方法:

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

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

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

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

我将在插入模式下写出模式,然后使用两个不同的寄存器将搜索和替换操作猛拉到两个不同的寄存器中,例如,
“ay
”by
,然后使用
:%s/a/b/gc
进行替换。yank命令有很多变体,但是当使用视觉选择时,这个命令也应该自动工作


如果要从剪贴板复制文本,可以使用
*
以插入模式粘贴其内容。

我的.vimrc中有以下映射

vnoremap <leader>r "ry:%s/^Rr/
vnoremap r“ry:%s/^Rr/
因此,我直观地选择要替换的内容,然后点击
,r
,键入替换内容并点击return。如果我要粘贴替换内容,我在选择要替换的文本之前将其拖动,然后在点击return之前使用
将其粘贴为替换内容


注意:要在.vimrc中插入
^R
,实际上是键入

我不理解这个问题。
%s
命令将替换整个缓冲区,因此您不需要重复执行多次。我反复使用这个词来强调,我不能只修改文本,因为它在我的脚本中存在多次。注意:这种方式仅适用于替换部分(它有一个替换部分)。此外,替换中
\=
后面的文本可以是任意文本。计算结果为寄存器
r
的内容。因此,例如,将某个内容拖动到默认寄存器中,然后键入
:%s/
然后按ctrl-r
把它放进去,然后是你的第二个
/
,然后是一个替换模式-你也可以把它拉到另一个寄存器中。该死,我已经错过这个很久了=)