如何在Vim中重复替换命令?

时间:2008-12-19 20:37:30

标签: vim history repeat substitution

在Unix中,^允许您重复一个命令,其中一些文本替换为新文本。例如:

csh% grep "stuff" file1 >> Results
grep "stuff" file1
csh% ^file1^file2^
grep "stuff" file2
csh%

是否有Vim等价物?很多时候我发现自己在命令行上一遍又一遍地编辑小事。

7 个答案:

答案 0 :(得分:46)

专门用于替换:使用&在正常模式的当前行上重复上次替换

要重复所有行,请键入:%&

答案 1 :(得分:10)

q:进入命令行窗口(:help cmdwin)。

您可以在此窗口中编辑和重复使用以前输入的ex-style命令。

答案 2 :(得分:7)

有两种方式。

  1. 您只需按键即可执行最后一个命令(移动除外)的精确重放。例如,我键入 c w 然后hello将单词更改为“hello”。将光标移动到另一个单词后,我点击再次执行此操作。
  2. 对于更高级的命令,例如替换,在执行了替换后,只需按键然后按向上箭头键,它就会填充命令行使用相同的命令。

答案 3 :(得分:6)

点击:后,您可以键入几个字符和向上箭头,它将与您输入的字符匹配。例如键入:set,它将通过您的“集合”回溯。这也适用于搜索 - 只需输入/和向上箭头。并且/abc向上箭头会以适当的方式为您提供匹配的搜索字符串。

答案 4 :(得分:2)

要使用所有相同的标志在所有行上重复上一个替换,可以使用映射g&

答案 5 :(得分:1)

如果您是在普通模式:s/A/B/g(当前行)或可视模式:'<,>'s/A/B/g(当前选择中包括的行)中以 替换的,重复最后一次替换,您可以:

  • 移动到另一行(正常模式),只需按&,或者如果您愿意,可以按:-&-<CR>(看起来像{{ 1}}),以不突出显示影响当前行,或者

  • 突出显示一个范围(可视模式),然后按:&-:-&(看起来像<CR>)以影响选择中的行范围

由于我对Vim的了解有限,因此可以解决一些问题。例如,在普通模式和可视模式下,最后的视觉替换:'<,'>&可以作为最后一个命令(:'<,'>s/A/B/g-:)使用,但总是会在正常模式下产生错误。 (它仍然指的是可视模式中的最后一个选择-而不是像我假设的那样指向光标处的空选择-并且我的示例替换一次性耗尽了所有匹配项。)同时,最后一个普通模式替换以<UP>开始,而不是:s,因此您需要对其进行修改以在可视模式下使用。最后,:'<,'>s可直接从普通模式获得,因此它接受重复和选择的其他替代方式,例如接下来两行的&,以及如ruohola用户所说的,2&代表整个文件。

在两个版本中,先按g&再按:就像您先按&然后重新输入:一样,因此您上次使用的模式无关紧要,只有当前的光标线或所选内容才能确定要受影响的行。 (请注意,s/A/B/之类的结尾标志也已清除,但在此语法中也紧随其后,例如g / :&g。在我看来,这是喜忧参半的结果,您可以/必须在这里重新指定标志,而独立的: '<,'>&g似乎根本不带有标志。我必须缺少一些东西。)

我欢迎提出建议和更正。大部分都是来自实验,所以我敢肯定还有很多,但还是希望能有所帮助。

答案 6 :(得分:0)