将空行显示为其他内容

时间:2012-09-08 23:33:13

标签: vim

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

Desired effect

就像我将标签字符>---替换为set listchars=tab:>-一样。只需以这种方式显示它,而不是实际插入它们。

此外,如果它能够适应我的终端尺寸,那就太棒了。

1 个答案:

答案 0 :(得分: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

这个技巧的缺点是它干扰了通常的目的 折叠,如果用户不经修改就不能轻易使用 在编辑过程中广泛依赖折叠的其他应用。