![为什么我在 CentOS 上的 xterm 中输入 Alt-h 时会看到 unicode 字符 è?](https://linux22.com/image/1415666/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E5%9C%A8%20CentOS%20%E4%B8%8A%E7%9A%84%20xterm%20%E4%B8%AD%E8%BE%93%E5%85%A5%20Alt-h%20%E6%97%B6%E4%BC%9A%E7%9C%8B%E5%88%B0%20unicode%20%E5%AD%97%E7%AC%A6%20%C3%A8%EF%BC%9F.png)
我正在从 ubuntu 机器 ssh 到 centos 机器。è
当我输入alt+ h(又名M-h
)时,我总是看到。我想在 tmux 绑定中使用此组合键,但它不起作用,因为它tmux
无法识别 utf8 字符。我的 Ubuntu 机器上没有这个问题。
我猜测这与语言环境有关。这是我在 CentOS 上的语言环境输出:
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=en_US.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=
我确实注意到在 Ubuntu 上我LANGUAGE=en_US:en
的语言环境输出中有一个额外的行。
有什么建议么?
答案1
tput rmm
似乎解决了我的问题。大部分。但我不完全明白为什么。
infocmp
当我在 centos 机器上运行时,我可以看到它rmm
并且smm
有值,但在我的 ubuntu 机器上却看不到。从terminfo
手册页中我了解到rmm
“关闭元模式”和smm
“打开元模式”。
此外,将它添加到我的 .bashrc 中似乎不起作用tput rmm
。我必须从我的 centos shell 手动运行它。我还是不明白为什么。
答案2
关闭元模式是答案的一部分。xterm 有多个与此相关的可配置功能。ncurses FAQAlt 键在 Bash 中不起作用提供了一些背景知识。本质上,有两个概念元模式是:
- xterm 和终端数据库 (terminfo) 记录了元键作为一种移位修饰符的使用,设置输入字节的第八位。xterm 手册在八位输入资源。terminfo 手册更简洁:
如果终端有“元键”它充当移位键,设置传输的任何字符的第 8 位,这一事实可以用公里否则,软件将假定第 8 位是奇偶校验,并且通常会被清除。如果存在用于打开和关闭此“元模式”的字符串,则可以将其给出为韓國和響。
- bash 表示,它希望在应用 meta 键的字符前添加一个转义字符。(没有记录表明 bash 是如何决定这一点的,它只是元但至少可以追溯到 20 世纪 90 年代初)。
因此,问题在于 xterm 实现了一个控制序列,用于打开/关闭元模式,而 bash 对如何处理它有一些期望。奇怪的是,bash 准备的任何终端都没有被注意到(它肯定不是 xterm)。但是,为了以防万一 bash 看到那终端,它会默认为任何实现它的终端打开元模式。