在Vim中,是否可以在搜索行中粘贴文本?


105

我想搜索$maximumTotalAllowedAfterFinish并替换为$minimumTotalAllowedAfterFinish。而不是输入长文本:

:%s/$maximumTotalAllowedAfterFinish/$minimumTotalAllowedAfterFinish/g

有没有办法将这些长变量名复制到搜索行中,因为在命令行中我无法键入“ p”来粘贴?


2
我猜你也需要先逃脱,$因为这个角色意味着行尾。
卢克M

1
@LucM OP还可\V在搜索模式中的任何位置禁用“魔术”字符。
dash-tom-bang

Answers:


128

您可以通过键入插入编号或命名寄存器的内容CTRLR {0-9a-z"%#:-=.}。通过键入,CTRL-R CTRL-W您可以将当前单词粘贴到光标下方。看到:

:he cmdline-editing

想要查询更多的信息。


8
感谢您的回答,对我来说最常见的是:CTRL+ R +(因为剪贴板内容如此)
Peter Butkovic 2013年

4
0寄存器包含最后猛拉字符串。
Evgeni Sergeev

52

照常复制它,然后CtrlR"粘贴。还有许多其他CtrlR快捷方式(例如,计算器,当前文件名,剪贴板内容)。键入:help c_<C-R>以查看完整列表。


15

键入q:以在新缓冲区中进入历史记录编辑模式。然后编辑缓冲区的最后一行并按Enter执行。


3
这就是缓冲区的用途!谢谢(我总是碰巧在输入:q时偶然发现它)并且感到困惑)
gsk

3
q/对访问搜索历史记录和粘贴新搜索也很有用。
79E09796

15

复制:
1)v(或在可视模式下用鼠标突出显示)
2)y(拖动)

粘贴:
1)/(搜索模式)
2)Ctrl + R + 0(粘贴来自抽头寄存器的粘贴)


1
当我在google中搜索此问题时,我一直在寻找该答案,我想知道为什么它的投票否定。
圣地亚哥·亚利桑那州,2015年

3

或在vim缓冲区中创建命令,例如在缓冲区中键入命令:

s/foo/bar/gci

然后将其复制到一个命名寄存器中"ayy(如果光标在该行上!)。

现在,您可以a使用以下命令从Vim的Ex命令行执行“ ”寄存器的内容:

:[OPTIONAL_RANGE]@a

我用它所有的时间。


您的“ ayy”要么被引号(因此是错误的),要么不是(因此结尾有一个错误的“”)
tzot

2

通常,您可以通过鼠标选择(也许CtrlInsCtrlC选择之后),然后在命令行/搜索行中单击鼠标中键(ShiftInsCtrlV)来实现。

另一种方法是,在文本缓冲区中写入命令/搜索行,并在文本缓冲区中进行所有编辑,从:和开始,然后在该行中执行以下操作:

"add@a

它将整个命令行存储在buffer中a,然后执行它。但是,它不会存储在命令历史记录中。

尝试在文本缓冲区中创建以下行,作为上述按键的示例:

:%s/$maximumTotalAllowedAfterFinish/$minimumTotalAllowedAfterFinish/g

最后,您可以输入q:以在文本缓冲区中输入历史记录编辑。


1

您可以将光标放在要添加到样式中的单词上,然后按/:进入搜索或命令模式,然后按CtrlRCtrlW复制该单词。资源

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.