vim:删除多行的前两个空格

时间:2011-08-05 19:36:59

标签: vim

使用VIM删除每行的前2个空格的最简单方法是什么?基本上它每行重复“2x”。

澄清:这里假设前两个字符是空格。所以问题是关于多条线的缩进。

7 个答案:

答案 0 :(得分:103)

  1. 使用Ctrl-V进入可视屏蔽模式(如果使用Ctrl-Q进行粘贴,则输入Ctrl-V);
  2. 使用箭头选择要删除的区域;
  3. 然后按d删除所选区域。

答案 1 :(得分:88)

更多选择。你可以决定哪种是“最简单的方法”。

删除每行的前2个字符:

:%normal 2x

删除每一行的前2个字符,只要它们是空格:

:%s/^  /

请注意,最后一个斜杠是可选的,仅在此处,以便您可以看到这两个空格。没有斜杠,它只有7个字符,包括:

为每一行向左移动缩进:

:%normal <<

答案 2 :(得分:13)

你也可以使用搜索和替换(在ex编辑器中,通过字符访问):

无论如何都删除前两个字符:

%s/^.\{2}//

删除前两个空白字符(必须在开头,两者都必须是空格......将跳过任何不符合该条件的行):

%s/^\s\{2}//

答案 3 :(得分:7)

假设shiftwidth=2,则使用范围为%

的shift
:%<

答案 4 :(得分:4)

两个空格,还是两个字符? (2x执行后者。)

:[range]s/^  //

删除每行开头的两个空格;对%使用1,$(相当于[range])对整个文件执行此操作。

:[range]s/^..//

删除每行的前两个字符,无论它们是什么。 (请注意,它会删除两个字符,而不一定是两个;一个制表符会计为一个字符。)

如果您真正在做的是更改缩进,可以使用<命令来减少缩进,或使用>命令来增加缩进。设置shiftwidth以控制它移动的距离,例如

:set shiftwidth=2

答案 5 :(得分:3)

我会尝试以下两种方法之一:

  1. 使用Ctrl+V对块进行列编辑以进行删除(通常映射到Ctrl+Q)。
  2. 使用q1(或您想要表示录制寄存器的任何其他数字/字母)在第一行录制宏,然后使用@1多次重播该宏(使用我之前的示例)更好的是,使用前面的数字告诉它运行多少次 - 例如10@1运行该宏10次。但是,它确实取决于你记录的内容 - 确保回放光标{ {1}}或删除一行0,如果相关的话。

答案 6 :(得分:3)

我还要补充:学习如何为vim配置缩进。然后一个简单的gg=G就可以了。