我关注(并修改)了这篇 Reddit 帖子,以便在 Terminal.app 和 tmux(1) 中使用斜体。
斜体工作
命令
echo -e "\e[3mfoo\e[23m"
在常规终端会话和 tmux 会话中输出foo (斜体)。
同样在两者中,命令序列
vim README.md
i*foo*<Esc>
编辑文件README.md
并以斜体显示文本*foo*
。
除了少
在 tmux 中,less(1) 使用斜体显示所有“强调”的行(例如提示符)。
在 tmux 之外,没有雪茄。less 将使用“正常”反向突出显示强调的线条。
问题
为什么在常规会话和 tmux 之间观察到的行为差异较小,而其他程序则不然?
我怎样才能让更少的行为更统一?
相关信息
TERM
:xterm-256color
要么tmux-256color
xterm-256color
和tmux-256color
定义:
# A xterm-256color based TERMINFO that adds the escape sequences for italic.
#
# Install:
#
# tic xterm-256color.terminfo
#
# Usage:
#
# export TERM=xterm-256color
#
xterm-256color|xterm with 256 colors and italic,
sitm=\E[3m, ritm=\E[23m,
use=xterm-256color,
# A tmux-256color based TERMINFO that adds the escape sequences for italic.
#
# Install:
#
# tic tmux-256color.terminfo
#
# Usage:
#
# export TERM=tmux-256color
#
tmux-256color|tmux with 256 colors and italic,
sitm=\E[3m, ritm=\E[23m,
use=screen-256color,
sitm
和ritm
两个 s 中的序列TERM
:sitm=\E[3m
ritm=\E[23m
- 斜体的vimscript:
if $TERM =~# '\v(xterm|tmux)-256color' || has('gui_running')
if has('osx')
let &t_ZH = "\e[3m"
let &t_ZR = "\e[23m"
endif
endif
我希望更少使用smso,而不是sitm。您从 screen-256color 派生了 tmux-256color,其中 smso 设置为 SGR 3:
这意味着您将在 tmux 中使用斜体。smso 在 screen-256color 中是 SGR 3 的原因是 screen 不支持斜体,而是使用 SGR 3 进行反转(我认为现在这可能已经改变,但我不确定)。
但是 xterm-256color 将 smso 设置为 SGR 7:
这意味着您将在 tmux 之外获得出色的(反向)。
因此,要解决此问题,请修改您的 terminfo 条目以将 smso 设置为您喜欢的任何内容(斜体或反向),用于 xterm-256color 和 tmux-256color。
我假设您已经有了这个,因为您在 tmux 中使用斜体,但请确保您在 .tmux.conf 中将 default-terminal 设置为 tmux-256color,否则 tmux 将模拟屏幕并发送 smso 而不是斜体的 sitm。
使用
-r
(--raw-control-chars
) 或-R
(--RAW-CONTROL-CHARS
) 选项less
使其解释特殊字符而不是转义它们。-R
应该只解释\E[...m
序列,而-r
解释一切。要始终启用该选项,请将 env 变量设置
$LESS
为-R
.