Vim删除空白行

nea*_*ime 654 vi vim

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

sou*_*rge 1194

:g/^$/d
Run Code Online (Sandbox Code Playgroud)

:g将在与正则表达式匹配的行上执行命令.正则表达式是'空行',命令是:d(删除)

  • 谢谢soulmerge.这是我最喜欢的答案,因为它实际上解释了:g命令的作用. (35认同)
  • 这将删除所有空行(不包含任何空白字符..),但这可能不是唯一的要求.有人可能仍然保留其中一条空行.`:%!cat -s`可能是选择.. (3认同)
  • :g/^\s*$/d 行中带有“任何可能的空格字符”的正则表达式 (2认同)

nea*_*ime 176

发现它,它是:

g/^\s*$/d
Run Code Online (Sandbox Code Playgroud)

来源:功率在Wikia的VIM

  • 应该匹配空白行和只由空格组成的行......(*匹配零个或多个\ s的实例...)? (16认同)
  • 我认为纯空白确实是一个空白行,而没有空白真的更像是一条空行,你不觉得吗?;) (14认同)
  • 啊,是的,这将匹配仅包含空白字符的行.我会接受soulmerge的回答. (11认同)
  • 尼斯.但不完全是一个空白行. (9认同)
  • 牛津说空白是"留在文件中的空间".尽可能地解释,但这正是我想要的.谢谢! (3认同)

man*_*eka 50

:v/./d
Run Code Online (Sandbox Code Playgroud)

要么

:g/^$/d
Run Code Online (Sandbox Code Playgroud)

要么

:%!cat -s
Run Code Online (Sandbox Code Playgroud)

  • 巧妙的诀窍:v /./ d(更容易打字)但是你需要做一个:nohl之后. (7认同)
  • @zladuric根据http://vim.wikia.com/wiki/Power_of_g它是reVerse全局(因此它对所有不匹配的命令执行命令) (6认同)

Dra*_*mon 42

以下内容可用于仅删除多个空行(将它们缩小为一个空行)并保留单个空白行:

:g/^\_$\n\_^$/d
Run Code Online (Sandbox Code Playgroud)

  • `\ _ $`表示可以在模式中使用的*end-of-line*(`$`只能在模式的末尾使用.)与`\ _ ^`相同,这意味着*开始一行*,可以在模式内的任何地方使用.因此,模式匹配空行,换行符和空行.请参阅[Vim正则表达式帮助页面](http://vimdoc.sourceforge.net/htmldoc/pattern.html). (5认同)
  • 有人可以解释一下令牌是什么意思吗?(那么,它是如何工作的?)谢谢. (3认同)

小智 14

  1. 如何删除所有空白行

    :%s,\n\n,^M,g
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    :%s,\n\n\n,^M^M,g
    
    Run Code Online (Sandbox Code Playgroud)

    (多次这样做)

  3. 如何删除所有空行,留下两条空行AT MAXIMUM,

    :%s,\n\n\n\n,^M^M^M,g
    
    Run Code Online (Sandbox Code Playgroud)

    (多次这样做)

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

  • 您也可以使用`\ r`代替`Ctrl-M`. (2认同)

akp*_*akp 6

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


nie*_*ang 5

在vim中使用perl:

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


Ser*_*ujo 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>
Run Code Online (Sandbox Code Playgroud)


all*_*kim 5

这适合我

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

  • 我使用类似的东西: `:%s/^\n//gc` (2认同)

小智 5

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

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

:v/\S/d
Run Code Online (Sandbox Code Playgroud)

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