设想:
我有一台服务器,在其上运行 tmux 会话。让我们在本文的其余部分中调用该会话tmux_session
。
可以通过两种略有不同的方式附加到该会话:
首先通过 ssh-ing 到服务器:
user@host$ ssh [email protected]
然后附加到命名会话:
user@server$ tmux a -d -t tmux_session
通过 ssh-ing 和同时附加:
user@host$ ssh [email protected] -t tmux -a -d -t tmux_session
症状:
方法№1按预期工作。我LANG
的设置为C.UTF-8
, echo
-ing 它在里面tmux_session
工作正常,并且报告正确。像“¹²³¤”这样的字符的 Unicode 输入,工作得非常好。
方法№2产生一个会话,除了简单的ASCII 之外,它不能显示Unicode 字符。所有其他字符都替换为_
(下划线)。但是,当输入特殊字符时,该字符实际上是输入到内部运行的任何应用程序中tmux_session
,我使用编辑器、IRC 客户端等确认了它。当我使用方法 №1 分离和重新附加时,之前输入的字符会正确显示.
使用方法二时的这个问题,只有在使用 ssh 命令附加到会话时才会发生,并且它只影响字符的显示,而不影响正在输入的实际字符。
不过,里面的一些输出tmux
两次都有点坏。当我使用任何echo $LANG
一种方法进入内部时,我都会看到:tmux_session
$ echo $LANG
cho C.UTF-8C.UTF-8
出现乱码,由于某种原因,输入行(部分)重复。我在 superuser.com 上的另一篇文章中读到,应该先删除.tmux.conf
. 我没有.tmux.conf
,因此没有该文件似乎并不能减轻我的问题。无论如何,$LANG
设置为C.UTF-8
是正确的。
当只是 ssh-ing 到服务器时,不会发生这种乱码输出。
您正在检查
tmux
会话中的语言环境设置,而不是那些tmux
本身接收的语言环境设置。server.ltd
可能没有AcceptEnv LANG LC_*
它sshd_config
或/并且你没有SendEnv LANG LC_*
你的ssh_config
,所以你的本地系统和终端使用 UTF-8 作为字符集的事实不会传输到远程tmux
客户端。您可以通过以下方式解决它:
(假设本地 shell 和远程用户的登录 shell 类似于 POSIX)
或者,如果您知道您的终端正在使用 UTF-8 通话,则只需硬编码您选择的 UTF-8 语言环境:
(所有 shell 都能理解的语法)。