Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vim可视模式下的多个s///命令_Vim - Fatal编程技术网

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

vim可视模式下的多个s///命令,vim,Vim,我想: 选择多行(Shift-v) 在每个选定行上插入前导空格 删除每个选定行上的尾随空格(如果有) 我想一步完成更改。以下是我如何通过多个步骤完成这项工作: :'<,'>s/^/ / gv :'<,'>s/ *$// :'s/^/|:exec“norm gv:s/*$/^@” 其中^@是Ctrl-vCtrl-j 有没有更好的办法。我对视觉模式下的多个s//命令的通用解决方案感兴趣,而不仅仅是一个关于前导和尾随空格的解决方案。在一次替换中完成这一切: :s/

我想:

  • 选择多行(Shift-v)
  • 在每个选定行上插入前导空格
  • 删除每个选定行上的尾随空格(如果有)
我想一步完成更改。以下是我如何通过多个步骤完成这项工作:

:'<,'>s/^/    /
gv
:'<,'>s/ *$//
:'s/^/|:exec“norm gv:s/*$/^@”
其中
^@
是Ctrl-vCtrl-j


有没有更好的办法。我对视觉模式下的多个
s//
命令的通用解决方案感兴趣,而不仅仅是一个关于前导和尾随空格的解决方案。

在一次替换中完成这一切:

:s/\(.\{-}\)\s*$/    \1/
我们捕获行的“肉”,并添加起始空格,同时删除尾随空格

多重替换:

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

:s/^/|'此处;最好(即更短更快)同时进行两次删除(根据@PeterRincker的回答)。一般来说,您不需要重新选择;
:“这正是我在前面对彼得·林克的答案的评论中所说的,与他的部分答案基本相同。
:s/^/    /|'<,'>s/\s*$//
:'<,'>s/^/    / | '<,'>s/ *$//