突出显示文件开头和结尾处的空行以及多个空行

时间:2018-10-04 08:59:55

标签: vim

在vim中,我想突出显示文件开头和结尾处的空行以及不止一个连续行。示例:

--- start of file
.
and empty line just before this line (at the beginning of the file)
more than one empty line will follow
.
.
empty lines at the end of file will follow
.
.
--- end of file

在上面的示例中,带点的线应突出显示。

不幸的是,我尝试用下面的表达式匹配这些行:

call matchadd('EmptyLines', '\n\s\*\n\s\*\n')

如何匹配所有这些行并突出显示它们(最好是整行)?

1 个答案:

答案 0 :(得分:2)

特殊的正则表达式原子@Unroll("Given I have #amount units with a price of #unitPrice each, then I should have a total amount of #expectedResult") def "test collect"() { when: def result = amount * unitPrice then: result == expectedResult where: amount | unitPrice | expectedResult 1 | 1000 | 1000 2 | 2000 | 4000 3 | 3000 | 9000 } :help start-of-file)和\%^:help end-of-file)将在这里有所帮助。使用它们,您可以在缓冲区的边界处匹配空行,如下所示:

\%$

不幸的是,有一些限制

  • 您只能匹配其中的内容,空行中的内容不多。 Vim只会突出显示一个单元格宽度(代表换行符)。
  • 在最后一行,什么都没有突出显示。如果您希望看到最后一个空行的指示,可以将call matchadd('EmptyLines', '\%^\n\+') call matchadd('EmptyLines', '^\n\+\%$') 从模式中删除。然后,空的尾随行将通过在该行之前突出显示来指示。

实施方案

使用:help signs,您可以突出显示空行的整个宽度,并在 sign列中添加其他指示。缺点是您不能简单地定义标志的模式。您必须将它们显式地放置在某些行上,并在缓冲区内容发生更改时调整该位置。这意味着要定义一些^,并且要么表现不佳,要么接受短暂的延迟直到信号更新。 (它们旨在用于标记构建错误,这些错误不会经常更改,而只会按需更改。)


如果您的目标是避免出现这些空行,那么也可以使用视觉效果而不是视觉指示,也可以挂入:autocmd事件并打印警告或完全中止BufWrite(如果这些行是找到了。我的DeleteTrailingWhitespace plugin会这样做(但对于每行末尾的空格)。