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

qqrboqgw  于 2023-03-18  发布在  其他
关注(0)|答案(8)|浏览(191)

在Unix中,^允许你重复一个命令,用一些文本代替新文本。例如:

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

有Vim的等价物吗?有很多次我发现自己在命令行上一遍又一遍地编辑次要的东西。

tag5nh1u

tag5nh1u1#

特别针对替代品:使用&在正常模式下对当前行重复上次替换
要对所有行重复,请键入:%&

rjee0c15

rjee0c152#

q:以进入命令行窗口(:help cmdwin)。
可以在此窗口中编辑和重用以前输入的前样式命令。

wkftcu5l

wkftcu5l3#

一旦你点击:,你可以输入几个字符和向上箭头,它将字符匹配你输入的内容。例如,输入:set,它将通过你的“集”爬回来。这也适用于搜索-只需输入/和向上箭头。和/abc向上箭头将提供你匹配搜索字符串逆时间顺序。

relj7zay

relj7zay4#

有两种方法。
1.您只需按下.键就可以精确地重播最后一个命令(而不是移动)。例如,我键入cw然后hello将一个单词改为“hello”。将光标移到另一个单词后,我按下.再次这样做。
1.对于更高级的命令,如替换,在执行替换后,只需点击:键,然后再按↑向上箭头键,它会用相同的命令填充命令行。

0tdrvxhp

0tdrvxhp5#

若要在所有行上使用相同的标志重复前面的替换,可以使用Mapg&

nhn9ugyo

nhn9ugyo6#

如果您已在正常模式:s/A/B/g(当前行)或可视模式:'<,>'s/A/B/g(当前选择中包含的行)下进行了替换,并且想要重复上次替换,则可以:

  • 移动到另一行(正常模式),只需按&,或者按:-&-<CR>(外观类似:&),即可影响当前行而不突出显示,或者
  • 高亮显示一个范围(可视模式),然后按:-&-<CR>(外观类似:'<,'>&)以影响选区中的行范围。

由于我对Vim的了解有限,这解决了几个问题:首先,最后一个可视替换:'<,'>s/A/B/g可以作为最后一个命令使用(:-<UP>)从正常模式和视觉模式,但是总是产生来自正常模式的误差。(它仍然引用视觉模式中的最后一个选择--而不是像我假设的那样引用光标处的空选择--并且我的示例替换在一次遍历中耗尽了所有匹配。)同时,最后一个普通模式替换以:s开始,而不是以:'<,'>s开始,因此您需要修改它以便在可视模式中使用。最后,&可以直接从普通模式中获得,因此它可以接受重复和其他选择,比如接下来两行的2&,正如用户ruohola所说,g&表示整个文件。
在这两个版本中,按:然后按&的效果就像您按了:然后重新键入了s/A/B/一样,因此您上次所处的模式是不相关的,只有当前光标行或所选内容才能确定该行(s)受影响。(请注意,像g这样的尾随标志也会被清除,但在此语法中也是下一个标志,如:&g/: '<,'>&g。在我看来,这是一个好坏参半的问题,因为您可以/必须在此处重新指定标志,而独立的&似乎根本不接受标志。我一定遗漏了什么。)
我欢迎大家提出建议和修改意见。这些意见大部分来自于刚刚的实验,所以我相信还有更多的东西要做,但希望它们能有所帮助。

pgx2nnw8

pgx2nnw88#

您可以键入@:以重复上一个命令。

相关问题