【问题标题】:How to check if a highlight attribute is displayable on a terminal?如何检查高亮属性是否可以在终端上显示?
【发布时间】:2026-01-06 09:35:01
【问题描述】:

我正在编写一个插件,需要检查一个突出显示属性(粗体、斜体、 下划线等)实际上可以在终端上显示。 我试图用termcap检查它。例如下划线,

!empty(&t_us) && !empty(&t_ue)

在 xterm 上变为 TRUE,并且可显示。
然而,
在 win32 上变为 TRUE,但无法显示。
在 nvim 上变为 FALSE,但可显示。

有人能有一个正确检查的好主意吗?

【问题讨论】:

  • 用户可以并且经常通过设置$TERM 来欺骗 Vim,这并不能反映他们的终端仿真器的功能,因此单独依赖 &t_xx 肯定不是一个好主意。如果您希望您的功能可靠,您可能需要检查 &t_xx 和其他内容,如 win32 以及可能的其他环境变量。
  • 即使这样也无济于事,因为没有实用的方法可以查看终端屏幕上的实际内容。

标签: vim terminal terminfo termcap


【解决方案1】:

突出显示颜色和属性应该由用户控制;这就是为什么我们以 colorschemes 的形式通过:highlight 组和捆绑包进行间接处理。

也就是说,对于 HTML 标签之类的 WYSIWYG 渲染,大多数用户可能希望将斜体渲染为斜体(等等......)

因此,我建议将此设置为可配置(通常通过:highlight default ... 以便用户可以覆盖它,或者通过g:pluginname_attributesForBlah 如果这会导致用户重复太多)。您仍然可以使用启发式方法(基于 termcap 信息或$TERM)来提供良好的配置默认值。这为大多数插件用户(在通用平台和终端上)提供了一个舒适的默认设置,但仍然允许针对特殊情况或有特殊需求的用户进行调整(例如,无法很好地阅读低对比度或斜体的视觉障碍)。

【讨论】: