如何在 Vim 中使用替换重复命令?
Posted
技术标签:
【中文标题】如何在 Vim 中使用替换重复命令?【英文标题】:How to repeat a command with substitution in Vim? 【发布时间】:2010-09-27 18:49:58 【问题描述】:在 Unix 中,^
允许您使用一些文本替换新文本来重复命令。例如:
csh% grep "stuff" file1 >> Results
grep "stuff" file1
csh% ^file1^file2^
grep "stuff" file2
csh%
是否有 Vim 等价物?很多时候,我发现自己在命令行上一遍又一遍地编辑小东西。
【问题讨论】:
【参考方案1】:专门用于替换:使用&
重复您上次的替换,从正常模式到当前行。
要对所有行重复,请输入:%&
【讨论】:
这也应该是这个问题的公认答案。 要在所有行上重复之前的替换并确认,您可以执行:%&c
【参考方案2】:
q:
进入命令行窗口(@987654322@)。
您可以在此窗口中编辑和重复使用以前输入的 ex 样式命令。
【讨论】:
不完全是我想要的,我想要一个更快的方法。但这是非常好的信息,因为现在我至少可以编写一个函数来做我正在寻找的东西。谢谢。【参考方案3】:点击:
后,您可以键入几个字符和向上箭头,它将与您键入的字符匹配。例如输入:set
,它会爬回你的“集合”。这也适用于搜索 - 只需键入 /
和向上箭头。 /abc
向上箭头会按时间顺序为您提供匹配的搜索字符串。
【讨论】:
【参考方案4】:有两种方法。
-
您只需按 . 键即可精确重播最后一个命令(移动除外)。例如,我输入 cw 然后
hello
将单词更改为“hello”。将光标移动到另一个单词后,我点击 . 再次执行此操作。
对于更高级的命令,如替换,执行替换后,只需按 : 键,然后按 ↑ 向上箭头键,它会填满您的命令行使用相同的命令。
【讨论】:
但我不想重复命令,我想重复一个命令(从命令行),文本略有不同。 是的,你可以按^箭头,然后改变任何东西就行了。很抱歉我没有提到这一点。【参考方案5】:要在所有带有相同标志的行上重复前面的替换,您可以使用映射g&
。
【讨论】:
这接近于我正在寻找的 - 如果我进行替换(:s/A/B/g
在正常模式下的当前行或v
/V
...:'<,'>s/A/B/g
视觉模式下的一系列线条),我想在另一条线/选择上重复替换,最好是在我选择的模式下。感谢您的回复,我发现从正常模式&
(相当于:&
)将替换当前行,:'<,'>&
(v
/V
...:&
)将替换在可视模式下选择的行范围。两个版本都重新应用在正常或可视模式下使用的最后一个替换。我也会将此作为答案发布。【参考方案6】:
如果您在正常模式:s/A/B/g
(当前行)或可视模式:'<,>'s/A/B/g
(当前选择中包含的行)下进行了替换,并且您想重复上一次替换,您可以:
移动到另一行(正常模式)并简单地按&
,或者如果你喜欢,:
-&
-<CR>
(看起来像:&
),以影响当前行而不突出显示,或
突出显示一个范围(可视模式)并按:
-&
-<CR>
(看起来像:'<,'>&
)以影响选择中的行范围。
以我对 Vim 的有限了解,这解决了几个问题。一方面,最后一个视觉替换 :'<,'>s/A/B/g
可作为正常模式和视觉模式下的最后一个命令 (:
-<UP>
) 使用,但在正常模式下总是会产生错误。 (它仍然指的是视觉模式的最后一个选择——而不是我假设的光标处的空选择——我的示例替换在一次遍历中耗尽了所有匹配项。)同时,最后一个正常模式替换以 :s
开头,而不是:'<,'>s
,因此您需要对其进行修改以在可视模式下使用。最后,&
可直接从普通模式获得,因此它接受重复选项和其他选择选项,例如接下来两行的 2&
,正如用户 ruohola 所说,整个文件的 g&
。
在这两个版本中,按 :
然后按 &
就像您按 :
然后重新输入 s/A/B/
一样,因此您上次所处的模式无关紧要,只有当前光标行或选择决定受影响的线路。 (请注意,像g
这样的尾随标志也被清除了,但在此语法中也出现了下一个标志,如:&g
/: '<,'>&g
。在我看来,这是喜忧参半,因为您可以/必须重新指定标志在这里,独立的&
似乎根本不带标志。我一定错过了一些东西。)
我欢迎提出建议和更正。其中大部分来自刚刚的实验,所以我确信还有很多内容,但希望它无论如何都会有所帮助。
【讨论】:
【参考方案7】:看看这个:http://vim.wikia.com/wiki/Using_command-line_history 进行解释。
【讨论】:
以上是关于如何在 Vim 中使用替换重复命令?的主要内容,如果未能解决你的问题,请参考以下文章