Regex 如何使用vim折叠多个空白行?
本封面详细介绍了以下Regex 如何使用vim折叠多个空白行?,regex,vim,Regex,Vim,本封面详细介绍了以下vim命令如何将一系列空行折叠为一行: :g/^$/,/./-j 但是,我想做同样的事情,但也将其中只有白色空格的行视为空白。以下命令是我尝试的,但不起作用: :g/^\s*$/,/./-j 据我所知,这应该会找到空的行,并且只有空格,但不是所有的行都被折叠。你已经完成了一半 请记住,初始命令由搜索部分和操作部分组成。搜索部分:g/^$/找到了所有空行,并且为每个空行执行了操作部分,/./-j(好的,每个都没有被以前的j删除) 您对字符串的搜索部分所做的修改是正确的,因为
vim
命令如何将一系列空行折叠为一行:
:g/^$/,/./-j
但是,我想做同样的事情,但也将其中只有白色空格的行视为空白。以下命令是我尝试的,但不起作用:
:g/^\s*$/,/./-j
据我所知,这应该会找到空的行,并且只有空格,但不是所有的行都被折叠。你已经完成了一半
请记住,初始命令由搜索部分和操作部分组成。搜索部分:g/^$/
找到了所有空行,并且为每个空行执行了操作部分,/./-j
(好的,每个都没有被以前的j
删除)
您对字符串的搜索部分所做的修改是正确的,因为它现在将查找空行或仅包含空格的行
然而,正是在那之后你正在执行的动作让你感到悲伤。要在找到的行上执行的原始操作是,/./-j
,这基本上意味着在从此行到下一个“实”字符之前的行的范围内执行联接j
。在您链接到的问题中,可以找到有关此工作原理的更多详细信息
它在您的案例中找到的第一个“真实”字符实际上包含空格,因此,虽然搜索位将查找空格行并对其执行操作,但操作中的连接范围将不是您想要的
您需要为操作中的范围结尾指定的是下一行之前的一行,该行不包含空格(而不仅仅是包含任何“实”字符的行)。带有非空白字符的行就是与regex\S
匹配的行(带大写字母S
的反斜杠表示非空白字符)
所以,最后,你要寻找的是:
:g/^\s*$/,/\S/-j
话虽如此,请记住,留下的那条线(我认为)是距离射程的第一条线。所以,它不一定是空的,它可能包含空格
如果希望确保所有纯空白行都为空,只需执行:
:g/^\s*$/s/.*//
在上面的折叠命令之后。或者,您可以使用|
作为操作分隔符将两者合并为一个命令:
:g/^\s*$/,/\S/-j|s/.*//
或者只是
:g/^\s*$/,/\s/-j
。很好,@Sato,这稍微简单一点。相应地调整了答案。