Vim以反方向替换

时间:2015-02-03 07:09:14

标签: vim replace

如何将Vim从当前行反向(向上)替换(用于搜索我正在使用?textToFind,以替换当前位置:,$s/a/b)?

3 个答案:

答案 0 :(得分:1)

您可以使用:s命令使用向后范围。

如果你想从第1行替换到当前行,你可以:,1s/foo/bar/g vim会询问你是否确定在后退范围内应用命令,按y

您还可以执行:,-3s/foo/bar/之类的操作,从当前行(n)到行n-3进行替换

答案 1 :(得分:1)

用于s//(和其他Ex命令)的范围可以由:

组成
  • 行号,1,23
  • 相对行,-5,+17
  • 行快捷键,.,$
  • 标记,'a,'g
  • 搜索,?foo?,/bar/
  • 或上述各项的任意组合,?foo?,'g23,$+5,/bar/.,/baz/+6 ......

从光标前的foo的第一个实例延伸到最后一行的范围可能如下所示:

?foo?,$

从光标前的foo的第一个实例延伸到当前行的范围可能如下所示:

?foo?,.

甚至缩短为:

?foo?,

答案 2 :(得分:0)

从头到尾没有内置的方式来访问这些行。 Vim会发出Backwards range given, OK to swap?个查询,并在确认后转过来。唯一的方法是以相反的顺序手动指定各行:

:.s/a/b | .-1s/a/b | .-2s/a/b | ...

当然,您可以为此编写自定义命令。

如果你还需要反向替换 一行(所有这些只对c onfirm标志有意义,不是吗?),你是运气不佳:substitute