TERM=tmux-256color 导致“打开终端时出错”

TERM=tmux-256color 导致“打开终端时出错”

我想启用斜体在 tmux 中(macOS Big Sur 11.3 上的 iTerm2 内)。我通过将其设置为实现了这一点.tmux.conf

set -g default-terminal "tmux-256color"

我已经使用 homebrew 安装了 ncurses 6.2 并将其设置在路径中的第一个位置。.zshrc

  export PATH="$HOMEBREW_PREFIX/opt/ncurses/bin:$PATH"

进行这些更改后,斜体就可以使用了。

但是,现在几个依赖于 ncurses 的程序无法启动:ncdu(1.15.1) 和nano(2.0.6 ) 都出错:

Error opening terminal: tmux-256color.

我的印象是他们不支持此TERM设置。奇怪的是, 1.12在我的 Raspbian 计算机上ncdu运行。tmux-256color

怎么了?程序不是像ncdu并且nano应该兼容吗tmux-256color

我找到了一个 hacky 解决方法(对于 macOS,在 Raspbian 上不需要)。如果我明确地改回TERM中的变量.zshrc,则所有内容(斜体和程序)都有效:

if [[ "$TERM" == "tmux-256color" ]]; then
  export TERM=screen-256color
fi

但我的理解是,TERM自我设定是一个很大的禁忌。您应该让环境正确设置它。我很惊讶它竟然能工作——tmux-256colorscreen-256color?这个黑客最终会在我脸上爆炸吗?

答案1

tmux 的终端描述源自 screen 的终端描述,您可能通过查看 infocmp 的输出来猜到。但是使用屏幕终端描述,您将失去修改后的功能键以及更改光标外观的能力。划掉的字符也不起作用。实际上斜体不应该工作,因为屏幕终端描述没有列出斜体(也许 tmux 有一些内置的解决方法 - 更可能的答案是在你的.tmuxrc文件中)。

导致 ncdu 和 nano 拒绝 tmux-256color 终端描述的问题是 MacOS 提供了非常旧的 ncurses 版本(5.7,从 2008 年开始),用于链接某些程序。纳米在卡塔利娜(也许 ncdu 会在后续版本中发布,但“几个”是有问题的,因为 MacOS 基本系统中只有六个程序实际使用了 Curses)。

MacPorts 和 homebrew 提供当前版本的 ncurses (6.2,2020 年起)。 和6.1(2018),一种新的二进制格式用于终端描述,其数字太大而无法适应带符号的 16 位格式。旧版本忽略该二进制格式;它的数据库没有tmux-256color(添加到2015年5月)。

升级是正确的做法(ncurses 落后了 12 年多,Apple 有点慢,不能指望)。 MacPorts 和 homebrew 都提供更新版本的 nano 和相同版本的 ncdu。

相关内容