Vim删除空白行


Answers:


1232
:g/^$/d

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


38
谢谢soulmerge。这是我最喜欢的答案,因为它实际上说明了:g命令的作用。
Tim Swast

4
这将删除所有空行(不包含任何空格字符..),但这可能不是唯一的要求。仍然有人可以保留其中一个空行。:%!cat -s可能是选择..
coanor

2
:g / ^ \ s * $ / d行中带有正则表达式“任何可能的空格字符”
oyd11 '18

180

找到了,它是:

g/^\s*$/d

资料来源:Vim Wikia g的

简要说明 :g

:[range]g/pattern/cmd

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


9
真好 但并非完全是空白行。
innaM

13
嗯,是的,这将匹配仅包含空格字符的行。我会接受soulmerge的回答。
09年

16
应该匹配空白行和仅由空格组成的行...(*匹配零个或多个\ s ...)?
monojohnny 2011年

14
我认为纯空格完全是一个空白行,而没有空格实际上更像是一个空行,是不是?;)
Kasapo

4
牛津大学说,空白是“需要在文档中填充的空间”。尽可能解释一下,但这正是我想要的。谢谢!
乔·崔卡里科


44

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

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

3
有人可以解释令牌的含义吗?(所以,它如何工作?)谢谢。
PAStheLoD 2014年

5
\_$意味着结束线能够在图案内被使用($只能在图案的端部被使用。)同样是\_^该装置的线的开始,并且可以在图案内的任何地方使用。因此,模式匹配一​​个空行,一个换行符,再匹配一个空行。请参阅Vim regex帮助页面
WiktorStribiżew'16

1
另一种方法是::g/^$/,/./-j
SergioAraujo,2016年

14
  1. 如何删除所有空白行

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

    (多次执行所有空行都消失了)

  2. 如何删除所有空白行而使单个空行

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

    (多次执行)

  3. 如何删除所有空白行,并保留两个空行(最大),

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

    (多次执行)

为了输入^ M,我必须在Windows中输入control-Q和control-M


2
您也可以\r代替Ctrl-M
dash-tom-bang

6

怎么样:

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



5

此函数仅删除两个或更多空行,将以下行放在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>

4

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

这是我发现可在Windows 7中的Vim上使用的最简单的工具:

:v/\S/d

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


3
: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行之间的所有空白行。我认为我的答案是最好的答案!


发布答案时,请添加并说明您更改或添加的内容或其工作方式等。即使您的答案可能是解决方案,也可能有些阅读此书的人不了解它的含义或作用方式。并请用英语做。
2014年

这在这里并不重要。这个问题在5年前就接受了答案
Tim

我认为soulmerge的答案:g / ^ $ / d不是最好的答案。我编辑以:g / ^ \ s * $ / d来改善他的答案。但是为什么我不能在“显示此姿势的所有编辑”中观看编辑?
cn8341 2014年

我的回答胜于他的回答,谁拒绝了我的回答,为什么我的回答被拒绝?
cn8341 2014年

2

如果某些内容使用了双行间距,则此命令将删除双倍间距,并将先前存在的重复空白行合并为单个空白行。它在行的开头使用临时定界符^^^,因此,如果这与您的内容冲突,请选择其他内容。仅包含空格的行被视为空白。

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


1

这为我工作:

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.