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

时间:2015-05-28 02:10:15

标签: vim

我想:

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

我想一步到位地进行更改。以下是我可以通过多个步骤完成的任务:

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

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

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

其中^@ Ctrl - v Ctrl - j

有没有更好的方法来做到这一点。我对可视模式下的多个s///命令的一般解决方案感兴趣,不止一个关于前导和尾随空格。

2 个答案:

答案 0 :(得分:3)

在一次替换中全部完成:

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

我们捕获线条的“肉”并添加起始空格,同时删除尾随空格。

多次换人:

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

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

答案 1 :(得分:0)

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

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