WezTerm 里 tmux 中 Unicode 字符显示为下划线怎么办?
WezTerm 里 tmux 中 Unicode 字符显示为下划线怎么办【免费下载链接】weztermA GPU-accelerated cross-platform terminal emulator and multiplexer written by wez and implemented in Rust项目地址: https://gitcode.com/GitHub_Trending/we/wezterm在 WezTerm 终端里通过tmux工作区运行程序时如果 Unicode 字符中文、emoji、框线字符等显示成了一排下划线问题通常不在 WezTerm 的渲染层而在LANG和 locale 环境变量。tmux认为当前环境不支持 UTF-8 时会把 Unicode 字形替换成下划线输出。本文基于 WezTerm 官方的 FAQ 说明如何定位并修复这个问题。为什么下划线只出现在 tmux 里终端处理的是字节流本身并不知道这些字节用什么编码解释。Unix 的做法是由用户通过 locale 环境变量LANG、LC_XXX等告诉应用程序如何解释字节流。而这些变量常见的问题是根本没有设置或者默认值无效。tmux又引入了一层额外的输入/输出处理它对LANG、TERM和 locale 很敏感而且这些值取决于tmux server 启动时的环境、tmux 客户端的环境以及 tmux 内部派生进程的环境。所以即使 WezTerm 窗口里直接运行 shell 显示正常套上 tmux 后仍可能乱码。官方 FAQ 给出的判断依据是Unicode 字符变成下划线 → 大概率是LANG/locale 问题本应是一个字形的地方出现了多个乱码字符 → 大概率也是 locale 环境变量问题看到的是 Unicode 替换字符、问号或空格 → 那是字体回退问题与本文讨论的下划线问题不同处理方式见 FAQ 的字体章节。第一步检查并设置 UTF-8 locale先确认系统上有哪些可用的 localelocale -a然后为环境选择一个 Unicode locale。官方 FAQ 给出的示例是export LANGen_US.UTF-8 # 这个 collation 不是必须的但大多数人可能希望用 C collation 得到合理的排序行为 export LC_COLLATEC如果环境里还有其他LC_XXX变量要么把它们从环境中移除如果适用要么把它们也调整为使用 UTF-8 的 locale。注意适用范围这个设置必须在你本地生效如果你还会通过 ssh 或 WezTerm 的 multiplexingmux连接协议登录到别的机器那些机器上的环境也要做同样检查。macOS 用户升级到指定版本后可自动设置如果运行在 macOS 上把 WezTerm 升级到20200620-160318-e00b076c或更新的版本即可WezTerm 会自动把LANG设置为合适的值这一条对上面“多个乱码字符”的排查同样适用。第二步重启 tmux server 使环境生效修改环境之后已经运行中的 tmux server 不会自动感知变化。FAQ 明确指出如果改了环境通常需要kill 掉并重启 tmux server新环境才会生效。这一步会终止当前 tmux server 及其托管的所有会话执行前确认会话里没有未保存的工作。之后从一个加载了新环境变量的 shell 里重新进入 tmux 即可。如何判断问题已解决重启 tmux server 后在 tmux 会话内输出 Unicode 内容例如包含中文、emoji 或 box 制表符的程序输出字符正常显示、不再是下划线说明 locale 问题已解决若仍是下划线回到第一步核对LANG与所有LC_XXX是否都是 UTF-8 的 locale、设置是否同时覆盖了你登录的远程机器若看到的是替换字符、问号或空格而不是下划线说明是字体缺字回退问题而非 locale 问题方向应转到 FAQ 中的 字体回退章节通过wezterm.font_with_fallback显式配置回退字体解决。相关排查建议排查输入/输出异常时官方建议先脱离 tmux 单独排查以减少变量数量再回头处理 tmux 这一层。更多 UTF-8 细节可以参考 tmux 项目自己的 FAQ 中关于 UTF-8 的部分。WezTerm 的按键处理本身始终输出 UTF-8 编码的文本这与 locale 无关但你的LANG和 locale 相关环境必须与之匹配。【免费下载链接】weztermA GPU-accelerated cross-platform terminal emulator and multiplexer written by wez and implemented in Rust项目地址: https://gitcode.com/GitHub_Trending/we/wezterm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考