【问题标题】:Vim delete blank linesVim 删除空行
【发布时间】:2010-10-16 21:43:15
【问题描述】:

我可以运行什么命令来删除 Vim 中的空白行?

【问题讨论】:

    标签: vim vi


    【解决方案1】:
    :g/^$/d
    

    :g 将在匹配正则表达式的行上执行命令。正则表达式为“空白行”,命令为:d(删除)

    【讨论】:

    • 感谢灵魂融合。这是我最喜欢的答案,因为它实际上解释了 :g 命令的作用。
    • 这将删除所有空行(不包含任何空白字符..),但这可能不是唯一要求。有人可能仍然保留其中一个空行。 :%!cat -s 可能是选择..
    • :g/^\s*$/d 在行中带有正则表达式“任何可能的空格字符”
    • @soulmerge 添加范围1,$/^\s$/d 或使用标签'a,'b/^\s$/d 怎么样?这对我不起作用
    • @AlexanderCska 应该是 1,$g/^$/d
    【解决方案2】:

    找到了,是:

    g/^\s*$/d
    

    来源:Power of g at vim wikia

    简述:g

    :[range]g/pattern/cmd
    

    这作用于指定的[范围](默认整个文件),通过对匹配pattern的每一行执行Ex命令cmd( Ex 命令是以冒号开头的命令,例如 :d 用于删除)。在执行cmd之前,“.”被设置为当前行。

    【讨论】:

    • 不错。但不完全是空行。
    • 啊,是的,这将匹配仅包含空白字符的行。我会接受 Soulmerge 的回答。
    • 应该匹配空行和仅由空格组成的行...(* 匹配零个或多个 \s 实例...)?
    • 我认为纯空格完全是一个空行,而没有空格实际上更像是一个空行,你不觉得吗? ;)
    • 牛津说空白是“文档中留待填写的空间”。你可以解释一下,但这正是我想要的。谢谢!
    【解决方案3】:
    :v/./d
    

    :g/^$/d
    

    :%!cat -s
    

    【讨论】:

    • 使用 :v/./d 的巧妙技巧(更易于输入),但之后您需要执行 :nohl。
    • @ClaesMogren 或者只是在 control-l 上弹跳
    • @zladuric 根据vim.wikia.com/wiki/Power_of_g 它是反向全局的(所以它对所有不匹配的东西执行命令)
    【解决方案4】:

    以下可用于仅删除多个空行(将它们减少为单个空行)并保持单个空行不变:

    :g/^\_$\n\_^$/d
    

    【讨论】:

    • 有人能解释一下令牌的含义吗? (那么,它是如何工作的?)谢谢。
    • \_$ 表示可以在模式内部使用的行尾$ 只能在模式的末尾使用。)同样是\_^ 表示行首,可以在模式内的任何地方使用。因此,该模式匹配一​​个空行、一个换行符和一个空行。见Vim regex help page
    • 另一种方法::g/^$/,/./-j
    【解决方案5】:
    1. 如何删除所有的空白行

      :%s,\n\n,^M,g
      

      (多次执行此操作,直到所有空行都消失)

    2. 如何删除所有空白行留下 SINGLE 空行

      :%s,\n\n\n,^M^M,g
      

      (重复多次)

    3. 如何删除所有空白行,最多留下两个空行,

      :%s,\n\n\n\n,^M^M^M,g
      

      (重复多次)

    为了输入^M,我必须在windows中控制-Q和控制-M

    【讨论】:

    • 您也可以使用\r 代替Ctrl-M
    【解决方案6】:

    怎么样:

    :g/^[ \t]*$/d
    

    【讨论】:

      【解决方案7】:

      这对我有用

      :%s/^\s*$\n//gc

      【讨论】:

      • 我使用类似的东西::%s/^\n//gc
      • 好,唯一的要求确认!
      【解决方案8】:

      在 vim 中使用 perl:

      :%!perl -pi -e s/^\s*$//g

      【讨论】:

      • 我的 perl 可能有点生锈了,但 chomp 不也能胜任吗?
      【解决方案9】:

      这个函数只删除两个或多个空行,把下面的行放在你的vimrc中,然后用\d调用函数

      fun! DelBlank()
         let _s=@/
         let l = line(".")
         let c = col(".")
         :g/^\n\{2,}/d
         let @/=_s
         call cursor(l, c)
      endfun
      map <special> <leader>d :keepjumps call DelBlank()<cr>
      

      【讨论】:

        【解决方案10】:

        我尝试了此页面上的一些答案,但其中很多对我不起作用。也许是因为我在 Windows 7 上使用 Vim(不要嘲笑,只是可怜我 :p)?

        这是我发现在 Windows 7 中的 Vim 上工作的最简单的一个:

        :v/\S/d
        

        这是 Vim Wikia 上更长的答案:http://vim.wikia.com/wiki/Remove_unwanted_empty_lines

        【讨论】:

          【解决方案11】:
          :g/^\s*$/d
          ^ begin of a line
          \s* at least 0 spaces and as many as possible (greedy)
          $ end of a line
          

          粘贴

          :command -range=% DBL :<line1>,<line2>g/^\s*$/d
          

          在你的 .vimrc 中,然后重新启动你的 vim。 如果您使用命令:5,12DBL 它将删除第 5 行和第 12 行之间的所有空白行。 我认为我的答案是最好的答案!

          【讨论】:

          • 发布答案时,请添加说明并说明您更改或添加的内容或其工作原理等。即使您的答案可能是解决方案,但阅读本文的某些人可能不理解它的含义或它的工作原理。请用英语做。
          • 这并不重要。这个问题在 5 年前接受了答案
          • 我认为 Soulmerge 的答案:g/^$/d 不是最好的答案。我编辑以改进他的答案:g/^\s*$/d。但是为什么我不能在“显示此姿势的所有编辑”中看到我的编辑?
          • 我的回答比他的回答好,谁拒绝了我的回答,为什么我的回答被拒绝了?
          【解决方案12】:

          如果您的文本有双倍行距,则此命令将删除双倍行距并将预先存在的重复空行合并为一个空行。它在行首使用 ^^^ 的临时分隔符,因此如果这与您的内容冲突,请选择其他内容。仅包含空格的行被视为空白。

          %s/^\s*\n\n\+/^^^\r/g | g/^\s*$/d | %s/^^^^.*
          

          【讨论】:

            【解决方案13】:

            这对我有用:

            :%s/^[^a-zA-Z0-9]$\n//ig
            

            它基本上删除了所有没有数字或字母的行。由于我列表中的所有项目都有字母,因此它删除了所有空白行。

            【讨论】:

              【解决方案14】:

              在插入模式下按delete键删除空白行。

              【讨论】:

                猜你喜欢
                • 2011-10-21
                • 1970-01-01
                • 1970-01-01
                • 2016-01-27
                • 2011-04-28
                • 1970-01-01
                • 2023-03-21
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多