vim可视化模式下的多个s///命令



我想:

  • 选择多条线(Shift-v)
  • 在每一行插入前导空格
  • 删除每一行的尾随空格(如果有的话)

我想一步完成更改。以下是我如何分多个步骤完成的:

:'<,'>s/^/    /
gv
:'<,'>s/ *$//

这是我发现的唯一一步完成的方法:

:'<,'>s/^/    /|:exec "norm gv:s/ *$//^@"

^@哪里 Ctrl - v Ctrl - j

有更好的方法来做这件事吗?我感兴趣的是在视觉模式下多个s///命令的通用解决方案-不止一个关于前导和尾随空白。

一次替换:

:s/(.{-})s*$/    1/

我们捕获该行的"主体",并添加开始空白,同时删除尾随空格。

多个替换:

:s/^/    /|'<,'>s/s*$//

我们明确地使用'<,'>作为我们的视觉范围(参见:h '<)。我们也可以使用*作为'<,'>的简写。例::*s/s*$//

这里;最好(即更短和更快)一次做两个删除(根据@PeterRincker的回答)。一般来说,你不需要重新选择;即使离开了可视模式,'<,'>也会持续存在(直到你进行另一次选择)。所以,这是可行的:

:'<,'>s/^/    / | '<,'>s/ *$//

最新更新