2

我希望我的 Vim 将空行显示为字符串###,如下所示:

所需的空行显示

我希望它的工作方式与我将制表符 char 替换>---set listchars=tab:>-. 只是以这种方式显示,而不是实际插入它们。

此外,如果它能够适应我的终端大小,那就太好了。

4

1 回答 1

6

通过折叠可以达到预期的效果。如果我们单独创建包含缓冲区空行的单行折叠,它们都将被标记为折叠。唯一剩下的就是相应地自定义突出显示。

首先,我们需要自动创建折叠。为此,我们可以将折叠切换到该expr方法,然后将foldexpr选项设置为仅针对空行计算为非零值:

:setl foldmethod=expr
:setl foldexpr=empty(getline(v:lnum))

我们接下来应该做的是让这些折叠自动关闭以触发折叠突出显示:

:setl foldminlines=0
:setl foldlevel=0
:set foldclose=all

最后,要在折叠线中重复一个自定义字符,我们只需清空关闭折叠显示的文本,并更改​​填充字符:

:setl foldtext=''
:set fillchars+=fold:#

为方便起见,将上述命令组合在一个函数中,我们得到以下结果:

function! FoldEmptyLine()
    setl foldmethod=expr
    setl foldexpr=empty(getline(v:lnum))
    setl foldminlines=0
    setl foldlevel=0
    set foldclose=all
    setl foldtext=''
    set fillchars+=fold:#
endfunction

当然,这个技巧的缺点是它会干扰折叠的通常应用,如果用户大量依赖折叠用于其他目的,则无法在不修改的情况下轻松使用。

于 2012-09-09T05:56:40.563 回答