【问题标题】:Changing cursor background when highlighting text突出显示文本时更改光标背景
【发布时间】:2016-06-25 14:46:49
【问题描述】:

我通过 Ubuntu 终端使用 vim。我想在选择测试时更改光标的光标背景颜色。

文本选择将使用:

hi Visual       ctermfg=52   ctermbg=167  cterm=none

但是这不会改变光标的背景,它也被选中但不会给人那种印象。

有没有我可以用来执行此操作的命令?我试过了

hi VisualCursor ...  
hi CursorVisual ...

但没有运气。

【问题讨论】:

  • 这是Cursor 高亮组。但是游标属性是由你的终端模拟器处理的,而不是由 Vim 处理的。无论您在 Vim 中做什么,都不会产生任何影响。
  • @ditto 您可以通过在命令行中输入:hi 来查看选项。您可以尝试使用CursorColumnCursorlCursor
  • 那么选择文本时光标背景颜色是怎么变化的呢?问题是,bg 颜色会变为光标所在文本的颜色。
  • xterm(1) 具有VT100*cursorColor,因此在~/.Xresources 中设置XTerm*VT100*cursorColor: red 将使所有在xterms 中运行的应用程序中的光标变为红色。也许gnome-terminal(1) 有类似的东西。

标签: vim gnome-terminal


【解决方案1】:

如 cmets 中所述,在 终端 中,光标 的前景色/背景色大多不受 vim 的控制。 ctermfgctermbg 的设置仅适用于 text 前景/背景。请参阅vim documentation 中标题为“2. highlight arguments for color terminal”的部分,其中描述了这些内容。

这些设置对应于 ANSI 转义序列 (ECMA-48)。 光标颜色没有对应的标准:

  • 许多终端允许您指定光标颜色(在启动终端之前),
  • 一些终端识别用于设置光标颜色的转义序列,
  • 某些终端会更改光标颜色以使其在相同颜色的文本上保持可见。

同样,当您用鼠标选择文本时,光标颜色的变化(或不变化)的方式也没有标准:

  • 某些终端会为反向视频中的选择着色,
  • 有些使用特殊的选择颜色,并且
  • 选择颜色可能/可能不会影响光标颜色。

没有提到实际使用的终端;假设默认终端是 gnome-terminal。所有相关功能都在VTE library 中。其中一些会随着时间而变化,但在当前代码中,查看位置位于 vtegtk.cc(尽管阅读 vte.cc 也会有所帮助):

/** * vte_terminal_set_color_cursor: * @终端:一个#VteTerminal * @cursor_background: (allow-none): 用于文本光标的新颜色,或 %NULL * * 设置光标下文本的背景颜色。如果 %NULL,文本 * 光标下会用前景色和背景色绘制 * 反转。 */ /** * vte_terminal_set_color_cursor_foreground: * @终端:一个#VteTerminal * @cursor_foreground: (allow-none): 用于文本光标的新颜色,或 %NULL * * 设置光标下文本的前景色。如果 %NULL,文本 * 光标下会用前景色和背景色绘制 * 反转。 * * 自:0.44 */ /** * vte_terminal_set_color_highlight_foreground: * @终端:一个#VteTerminal * @highlight_foreground: (allow-none): 用于高亮文本的新颜色,或 %NULL * * 为突出显示的文本设置前景色。如果 %NULL, * 未设置。如果既没有设置高亮背景也没有设置高亮前景, * 突出显示的文本(通常会突出显示,因为它被选中)将 * 前景色和背景色颠倒绘制。 */

VTE documentation 是从 cmets 生成的(在这种情况下模仿 JavaDoc)。所以阅读源代码是理解程序做什么的唯一方法。 cmets 同意 OP 提出的附加问题:

选择文本时光标背景颜色如何变化?问题是,bg 颜色会变为光标所在文本的颜色。

VTE 中的各个函数模仿 xterm 的特性,从而提供对颜色管理方式的更多控制。例如,VTE 可以识别让xtermcontrol 从shell 命令更改光标颜色的控制序列。控制序列记录在XTerm Control Sequences

        Ps = 1 2  -> Change text cursor color to Pt.

这样做会覆盖 cmets 中提到的反向视频方案。引用xterm manual 给出了一些可以在 VTE 中实施的替代方案的想法:

   highlightColor (class HighlightColor)
           Specifies  the  color  to  use  for  the background of selected
           (highlighted) text.   If  not  specified  (i.e.,  matching  the
           default  foreground),  reverse  video  is used.  The default is
           "XtDefaultForeground".

   highlightColorMode (class HighlightColorMode)
           Specifies whether xterm should use highlightTextColor and high-
           lightColor  to override the reversed foreground/background col-
           ors in a selection.  The default is  unspecified:  at  startup,
           xterm checks if those resources are set to something other than
           the default foreground and  background  colors.   Setting  this
           resource disables the check.

【讨论】:

    猜你喜欢
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    相关资源
    最近更新 更多