【问题标题】:How to "highlight" using text in Vim?如何在 Vim 中使用文本“突出显示”?
【发布时间】:2018-01-27 00:33:35
【问题描述】:

这三行 Vim 脚本通过将 [[[ 和 ]]] 围绕在我的源代码中“突出显示”我的源代码中的所有 TODO 实例。

:set t_Co=1
:highlight Braces start=[[[ stop=]]]
:call matchadd("Braces", "TODO")

不幸的是,这只适用于“普通终端”。这就是为什么我必须将t_Co 设置为1。

可以在彩色终端或 gui 中实现类似的功能吗? (或者在 NeoVim 中?)。这可能是一种使用元信息扩充代码的非常有用的方法。

【问题讨论】:

  • @JanHudec,您的 t_Co 默认设置为多少? set t_Co?。对我来说,它只有在 t_Co 是 1 时才有效。
  • 为什么您更喜欢使用颜色和文本属性的“正常”突出显示?这不会弄乱屏幕和垂直导航吗?
  • 什么是“普通终端”?你为什么set t_Co=1?是什么让您认为除了“普通终端”之外,您无法突出显示任意文本?为什么在第二行中使用highlight 而不是syntax?
  • @IngoKarkat:这将传达更多信息。例如,在 C 类定义的末尾,我可以在右大括号之后写类似“类结束”的东西。我可能只会将它用于行尾的扩充,所以它不会弄乱我的垂直对齐方式。
  • @romani "normal terminal" 是 vim 文档 h: highlight-args 中使用的表达式,意思是“非彩色终端”。我的问题不是用颜色突出显示文本,而是用文本“突出显示”文本。我不知道按照您的建议使用语法的优缺点。

标签: vim terminal syntax-highlighting neovim


【解决方案1】:

请记住,Vim 是一个文本编辑器;它们大多按原样显示文件内容。为了用元信息增强你的代码,Vim 提供:

  • (语法)突出显示:颜色和文本属性,如粗体或斜体
  • 隐藏:隐藏或压缩匹配项为空/单个字符
  • 标志(显示在窗口左侧的列中)

您的方法是滥用原始终端代码定义的黑客行为;这些是终端解释的不可见控制序列,但您发送可见文本。

正如您在:help highlight-args 发现的那样:

There are three types of terminals for highlighting:
term      a normal terminal (vt100, xterm)
cterm     a color terminal (MS-DOS console, color-xterm, these have the "Co"
          termcap entry)
gui       the GUI

start= 和 end= 参数(您的 hack 所依赖的)仅支持“普通终端”,不支持 cterm 和 gui。这就是为什么您必须:set t_Co=1(即强制使用非彩色终端)才能使其正常工作的原因。

由于这些缺点(以及更多:重绘问题、关闭的垂直导航),我建议放弃它,并使用上面列出的“已批准”方法之一。有这么多 Vim 用户,而且他们似乎对他们也很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 2011-05-05
    • 2015-01-08
    • 2017-02-04
    • 2012-01-28
    • 2010-12-03
    相关资源
    最近更新 更多