118

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

:%s/$maximumTotalAllowedAfterFinish/$minimumTotalAllowedAfterFinish/g

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

4

7 回答 7

146

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

:he cmdline-editing

了解更多信息。

于 2008-09-19T11:56:42.213 回答
62

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

于 2008-09-19T12:00:34.980 回答
23

复制:
1)v(或用鼠标突出显示,在视觉模式下)
2)y(猛拉)

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

于 2017-04-20T18:33:24.467 回答
16

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

于 2008-09-19T11:54:00.333 回答
3

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

s/foo/bar/gci

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

现在你可以a从 Vim 的 Ex 命令行执行 " " 寄存器的内容了:

:[OPTIONAL_RANGE]@a

我用它所有的时间。

于 2008-09-19T13:06:45.540 回答
2

通常,您可以通过鼠标选择(可能CtrlInsCtrlC在选择之后)然后在命令/搜索行中单击中键(或ShiftInsCtrlV)来执行此操作。

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

"add@a

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

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

:%s/$maximumTotalAllowedAfterFinish/$minimumTotalAllowedAfterFinish/g

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

于 2008-09-19T11:55:11.827 回答
1

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

于 2018-02-09T09:21:21.947 回答