【问题标题】:Can empty lines be displayed as something else in Vim?空行可以在 Vim 中显示为其他内容吗?
【发布时间】:2012-09-08 23:33:13
【问题描述】:

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

我希望它的工作方式类似于我将标签字符替换为 >---set listchars=tab:>- 的方式。只是这样显示,而不是实际插入它们。

另外,如果它可以适应我的终端大小,那就太好了。

【问题讨论】:

  • 我认为目前不可能。
  • 那张截图看起来像是“显示空白”编辑器模式——但我不知道它是什么编辑器。
  • @Conner 真的吗?就是这么简单
  • @FrankBro 可能看起来是这样,但我不相信有办法为不存在的东西显示字符。有 :help hide 和 :help listchars,但这些不包括这个特定的例子。
  • @FrankBro - 你为什么喜欢这样?这背后有什么原因吗?

标签: vim


【解决方案1】:

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

首先,我们需要自动创建折叠。为了这 目的,我们可以将折叠切换到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

当然,这个技巧的缺点是它会干扰 折叠的常用应用,没有就不能轻易使用 如果用户广泛依赖折叠其他 目的。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-11-05
  • 1970-01-01
  • 2011-04-18
  • 2022-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多