【问题标题】:vim: delete the first 2 spaces for multiple linesvim:删除多行的前 2 个空格
【发布时间】:2011-10-21 03:51:43
【问题描述】:

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

澄清:这里假设前2个字符是空格。所以问题是关于对多行一起做缩进。

【问题讨论】:

  • 它是专门的空格,还是前两个字符,不管它们是什么?
  • 前两个字符。假设前两个字符是空格。
  • 我已经展示了一种通过在 ex 编辑器模式下进行搜索和替换的方法。一种方法保证它只会对以两个空格开头的行执行此操作(并且只删除两个空格)。另一个只是去掉前两个字符,不管它们是什么。
  • Vim 问题不是关于 SO 的话题(查看关于 meta 的讨论,以及 ... SO FAQ)。此外,缩进 与开发相关...

标签: vim


【解决方案1】:
  1. 使用Ctrl-V(或Ctrl-Q,如果您使用Ctrl-V 进行粘贴)进入可视块模式;
  2. 用箭头选择要删除的区域;
  3. 然后按d删除所选区域。
  4. Esc

【讨论】:

  • ctrl-v 选择要删除的字符,然后 d 进行剪切。
  • 最高星级答案! :-)
  • 这在我使用的所有 vim 中都不起作用,但对于它确实起作用的那些,它非常方便,并且能够在实际执行之前将要删除的区域可视化是很好的。
  • 视觉块模式的不同默认绑定可能?可能是旧的 unix 发行版 VI(相对于 VIM)之间的差异。
  • 这可能是最简单、最明智的答案了。
【解决方案2】:

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

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

%s/^.\{2}//

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

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

【讨论】:

  • 末尾的 /g 是多余的。每行只进行一场比赛。
  • imo 这是一个很好的解决方案
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      假设一个shiftwidth=2,然后使用范围为%的shift

      :%<
      

      【讨论】:

        【解决方案6】:

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

        删除每行的前 2 个字符:

        :%normal 2x
        

        删除每行的前 2 个字符,仅当它们是空格时:

        :%s/^  /
        

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

        每行向左移动缩进:

        :%normal <<
        

        【讨论】:

        • 我喜欢 Vim 中有 30 种不同的方式来做某事。像这样的问题提出了你从来不知道的事情。我不知道 %normal。
        • 感谢您对最后一个破折号的澄清。这很有帮助。
        • 我要补充一点,% 符号仅表示“对文档中的每一行执行此命令,而不仅仅是当前行”。我想。找不到太多关于它的文档。
        【解决方案7】:

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

        :[range]s/^  //
        

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

        :[range]s/^..//
        

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

        如果你真正要做的是改变缩进,你可以使用&lt; 命令来减少它,或者使用&gt; 命令来增加它。设置shiftwidth 来控制它移动的距离,例如

        :set shiftwidth=2
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-27
          • 1970-01-01
          • 2011-01-20
          相关资源
          最近更新 更多