在Vim中,是否有一种方法可以将文本粘贴到搜索栏中?

131

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

:%s/$maximumTotalAllowedAfterFinish/$minimumTotalAllowedAfterFinish/g
有没有一种方法可以将这些长变量名复制到搜索框中,因为在命令行上我无法键入“p”来粘贴?
有没有办法把这些长的变量名复制到搜索栏里面去呢?因为在命令行上我不能键入“p”进行粘贴。

2
我猜你也需要转义第一个 $,因为这个字符表示行末。 - Luc M
1
@LucM OP 也可以在搜索模式中的任何位置使用 \V 来禁用 "魔术" 字符。 - dash-tom-bang
8个回答

161

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

:he cmdline-editing

欲了解更多信息,请参见。


14
谢谢您的提问。对于我来说,最常用的是CTRL+R +(因为它适用于剪贴板内容)。 - Peter Butkovic
6
寄存器 0 包含最后复制的字符串。 - Evgeni Sergeev

67

正常复制后,然后按下 CtrlR" 进行粘贴。还有许多其他的CtrlR快捷键(例如计算器、当前文件名、剪贴板内容)。输入:help c_<C-R> 查看完整列表。


35

复制:
1) v (或者在可视模式下用鼠标高亮)
2) y (yank,意为“拔出”)

粘贴:
1) / (搜索模式)
2) Ctrl + R + 0 (从已拔出的寄存器中粘贴)


2
当我在谷歌搜索这个问题时,我正在寻找这个答案,我不知道为什么它有负面评价。 - santiago arizti

17

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


3
那就是缓冲区的作用啊!谢谢(每次我都是在输入 :q 时偶然发现它,感到困惑)。 - gsk
4
q/还可以用于访问搜索历史记录并粘贴新的搜索内容。 - 79E09796

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

3

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

s/foo/bar/gci

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

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

:[OPTIONAL_RANGE]@a

我经常使用它。

你的“ayy”要么被引用了(因此不正确),要么没有被引用(因此末尾有一个错误的引号)。 - tzot

2
通常,您可以通过鼠标选择(例如在选择后使用CtrlInsCtrlC),然后在命令/搜索行中单击中键(或使用ShiftInsCtrlV)来完成此操作。
另一种方法是,在文本缓冲区中使用所有文本缓冲区中可用的编辑选项编写带有:的命令/搜索行,然后在该行上执行以下操作:
"add@a

该操作将把整个命令行存储在缓冲区a中,然后执行它。但是,它不会被存储在命令历史记录中。

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

:%s/$maximumTotalAllowedAfterFinish/$minimumTotalAllowedAfterFinish/g

最后,您可以输入q:进入文本缓冲区的历史编辑。

0
在你的 vimrc 文件中添加一行:cnoremap <c-v> <c-r>+,然后你就可以使用 ctrl-v 粘贴。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接