修复了 tmux 中的突出显示

and*_*tim 18 fonts terminal urxvt colors tmux

自从我开始使用urxvt + tmux作为主终端以来,我想念控制台上的突出显示(反向模式)。突出显示被替换为斜体字体- 一开始看起来很酷 -但是当我尝试在less.

这在终端类型设置为xterm*配置文件时正常工作(例如set -g default-terminal "xterm-color".tmux.conf 中)。但是,某些快捷方式不起作用,应用程序无法获得正确的终端几何形状,……在这种情况下。

and*_*tim 11

我在 tmux 的页面上找到了有关它的信息和解决方案:

Screen 的 terminfo 描述缺少斜体模式并在其位置具有突出模式,但使用与urxvt斜体相同的转义序列。这意味着vim寻找斜体的应用程序(如)将找不到它,并且可能会在其位置反转,而要求突出的应用程序(如 )最终将以斜体而不是反转结束。

[修复 1] 替换 terminfo 条目并获得反向 + 斜体

(每个用户!)

为了让应用程序知道tmux支持斜体并使用适当的转义序列来突出显示,您需要创建一个新的terminfo文件,其中包含修改sgr后的smsormsositmritm条目:

$ mkdir $HOME/.terminfo/
$ screen_terminfo="screen"
$ infocmp "$screen_terminfo" | sed \
  -e 's/^screen[^|]*|[^,]*,/screen-it|screen with italics support,/' \
  -e 's/%?%p1%t;3%/%?%p1%t;7%/' \
  -e 's/smso=[^,]*,/smso=\\E[7m,/' \
  -e 's/rmso=[^,]*,/rmso=\\E[27m,/' \
  -e '$s/$/ sitm=\\E[3m, ritm=\\E[23m,/' > /tmp/screen.terminfo
$ tic /tmp/screen.terminfo
Run Code Online (Sandbox Code Playgroud)

并告诉 tmux 在~/.tmux.conf 中使用它:

set -g default-terminal "screen-it"
Run Code Online (Sandbox Code Playgroud)

如果您的终端支持 256 色,请使用:

$ screen_terminfo="screen-256color"
Run Code Online (Sandbox Code Playgroud)

而不是“屏幕”。有关更多信息,请参阅有关 256 色支持的常见问题解答条目。还要注意,tmux 仍然会在不支持斜体的终端上显示反向视频。

如果您urxvt根本无法显示斜体,请确保您启用了斜体字体,例如,添加到~/.Xdefaults

urxvt.italicFont: xft:Bitstream Vera Sans Mono:italic:autohint=true
Run Code Online (Sandbox Code Playgroud)

[Fix 2] 简单地用反向替换斜体控制字符

将此终端覆盖添加到~/.tmux.conf

set -g terminal-overrides 'rxvt-unicode*:sitm@,ritm@'
Run Code Online (Sandbox Code Playgroud)

  • 好吧,根据 [tmux FAQ](https://github.com/ThomasAdam/tmux/blob/master/FAQ#L355) tmux 2.1 应该修复该行为。所以我想这只是暂时需要。我个人只是按照 OP 所说的去做,并将我的“默认终端”设置为“xterm”。 (4认同)
  • 修复 1 似乎有效,但现在是 2015 年,这真的有那么难吗? (2认同)

小智 5

我在 arch linux 中运行 urxvt。op的回答对我没有帮助。这帮助了我:

https://github.com/tmux/tmux/blob/2.1/FAQ#L355-L383


搜索italic并运行它;然后,把它放在 tmux 配置中

set -g default-terminal "tmux"
Run Code Online (Sandbox Code Playgroud)

不要使用“tmux-256color”。(尝试一下,我想,但它对我不起作用。)


最后,将其添加到您的 rc(.zshrc、.bashrc 等)中:

export TERM="xterm-256color"
Run Code Online (Sandbox Code Playgroud)