我想:
- 选择多条线(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/ *$//