xterm中的光标颜色;相应地改变vim中的语法

时间:2013-02-17 11:36:04

标签: vim syntax xterm

在gnome-terminal和konsole中,我的光标颜色根据vim中选定的前景颜色而变化(如果我在红色文本上,我的光标是红色)。 在xterm中,我的光标始终为白色。如何将xterm设置为与gnome-terminal或konsole相同的行为?

非常感谢。

4 个答案:

答案 0 :(得分:1)

实际上,xterm的manual并不那么简单,并且没有适合此功能的教程。引自手册:

  

cursorColor (类 CursorColor

     

指定用于文本光标的颜色。默认是   “XtDefaultForeground”。默认情况下,xterm会尝试保留此功能   颜色与背景颜色相同,因为它   通过填充文本单元格的背景来绘制光标。该   相同的限制适用于可能改变的控制序列   这种颜色。

     

设置此资源会覆​​盖xterm的大多数调整   光标颜色。它仍将使用反向视频来禁用一些   案例,例如黑色背景上的黑色光标。

此外,可以特别处理突出显示(引用命令行选项的描述);

  

<强> -hm

     

告诉xterm使用highlightTextColor和highlightColor   覆盖选择中反转的前景/背景颜色。它将highlightColorMode资源设置为“true”。

这暗示了一些案例:

  • 使用命令行选项或资源可以设置光标颜色。如果以这种方式设置(除非被动态颜色转义序列覆盖以更改颜色),xterm将使用此颜色。
  • 如果没有约束,xterm会尝试通过使用颜色0-7的“ANSI”控制序列设置的前景和背景颜色的反向来保持光标可见,以及颜色的非ANSI控件8 -255。
  • 偶尔,应用程序将前景色和背景色设置为相同的值(xterm也尝试为这种情况选择合适的光标颜色)。
  • 可以单独设置颜色以突出显示。

现在...... xterm基本上通过选择反转前景与背景的颜色使光标可见(除非被覆盖)。 Gnome-terminal做了类似的事情,但并不是真的:它从调色板中选择相反的项目,这可以(现在阅读一个例子)使光标不太明显,因为它使用的调色板不那么明亮。 (特别是,我注意到黄色文本的“反向”变成暗淡的橙色)。 Konsole的调色板通常会提供更差的可见性(虽然黄色像xterm一样反转,红色文字在黑色背景下模糊不清)。

的XTerm:

enter image description here

侏儒末端:

enter image description here

的Konsole

enter image description here

简而言之:听起来好像OP的xterm被配置为将光标颜色设置为特定值,并且修复将消除设置。但是光标在文本上的外观会有所不同,除非注意配置颜色(对于所有三个终端)。

答案 1 :(得分:0)

要确保光标的颜色始终是前景的颜色,请将其自己添加到.Xresources或整个机器上添加到/etc/X11/app-defaults/XTerm。秒的位置因操作系统而异。

xterm*cursorColor:      *XtDefaultForeground

答案 2 :(得分:0)

根据Xterm Control Sequences,您可以使用Control Sequence IntroducerOperating System Command,简称CSI/OSC

有趣的OSC

OSC Ps ; Pt BEL
...
Ps = 1 2 ⇒  Change text cursor color to Pt.

使用此 OSC 我们可以将文本光标更改为任何所需的颜色,它接受颜色名称,如 redgreen 等或类似:rgb:RR/GG/BB 见 { {3}}

有趣的CSI

CSI Ps SP q
          Set cursor style (DECSCUSR), VT520.
            Ps = 0  ⇒  blinking block.
            Ps = 1  ⇒  blinking block (default).
            Ps = 2  ⇒  steady block.
            Ps = 3  ⇒  blinking underline.
            Ps = 4  ⇒  steady underline.
            Ps = 5  ⇒  blinking bar, xterm.
            Ps = 6  ⇒  steady bar, xterm.

现在使用 vim 的 t_SIt_EI 以及这些 CSI/OSC 我们可以做这样的事情:

let &t_SI="\<Esc>[5 q\<Esc>]12;" . rgb_or_name_color . "\x7"
let &t_EI="\<Esc>[5 q\<Esc>]12;" . rgb_or_name_color_for_not_insert_mode . "\x7"    

这里有一个函数可以解析当前配色方案的 CursorType hi 组以获取 guifg(与 set termguicolors 一起使用)/{{ 1}} 种颜色,然后根据这些颜色设置 ctermfgt_SI

t_EI

使用 fun! UpdateTermCursor() if &term =~ "xterm\\|rxvt" fun! s:cologet(gr) let cc = execute('hi ' . a:gr) let color = matchstr(cc, 'guifg=\zs[^ ]*') if color == 'bg' let color = matchstr(cc, 'guibg=\zs[^ ]*') endif if color == '' let color = matchstr(cc, 'ctermfg=\zs[^ ]*') endif if color[0] == '#' let color = 'rgb:' . substitute(color[1:-1], '..', '\0\/', 'g')[0:-2] endif return color endfun let cur = s:cologet('Cursor') " You can change group, for example CursorLineNr, Special, NonText etc. let curb = s:cologet('Type') let &t_SI="\<Esc>[5 q\<Esc>]12;" . curb . "\x7" let &t_EI="\<Esc>[1 q\<Esc>]12;" . cur . "\x7" " Redraw :call feedkeys("i\<C-O>:stopinsert\<CR>") " silent! exe ':redraw!' " :call feedkeys("i\<Esc>l") " Restore cursor to I when leaving vim augroup TermCursorLeave autocmd! autocmd VimLeave * silent !echo -ne "\e[5 q" augroup END endif endfun 更改配色方案后,执行 :colorscheme,示例如下:

vim term cursor color

答案 3 :(得分:-1)

根据Xterm的manual,它会自动突出显示文本光标。 Gnome-terminal从Xterm继承了这个特性,这就是光标颜色在vim中变化的原因。

就我而言,xterm在光标高亮方面与gnome-terminal的工作方式相同。

您使用的是真正的xterm吗?所以只是将其他一些术语设置为'xterm'?