将空行显示为其他内容

Fra*_*Bro 2 vim

我希望我的Vim显示空行###########,如下所示:

期望的效果

喜欢的东西我如何取代我的标签字符来>---set listchars=tab:>-.只是以那种方式显示它,而不是实际插入它们.

此外,如果它能够适应我的终端尺寸,它会很棒.

ib.*_*ib. 6

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

首先,我们需要自动创建折叠.为此,我们可以将折叠切换到expr方法,并将foldexpr选项设置为仅为空行评估为非零:

:setl foldmethod=expr
:setl foldexpr=empty(getline(v:lnum))
Run Code Online (Sandbox Code Playgroud)

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

:setl foldminlines=0
:setl foldlevel=0
:set foldclose=all
Run Code Online (Sandbox Code Playgroud)

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

:setl foldtext=''
:set fillchars+=fold:#
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

这种技巧的缺点在于它干扰了折叠的通常目的,并且如果用户在编辑期间广泛依赖于折叠的其他应用,则不能在没有修改的情况下容易地使用.