Cygwin mintty环境下tmux内Unicode字符显示异常的问题求助
Cygwin mintty环境下tmux内Unicode字符显示异常的问题求助
我最近碰到一个特别费解的问题:在Cygwin的mintty终端里,直接用zsh的时候,几个测试的Unicode字符都能正常显示,但一旦进入tmux会话,不同命令输出里的Unicode字符就会莫名其妙丢失,而且不同命令的丢失情况还不一样。
测试命令及异常表现
我用了几个命令来测试:
- 循环打印指定Unicode字符:
for c in 00AE 1F007 1F32D 1F603; do printf '%s\t' "$c"; bash -c "echo -e '\U$c'"; done
在tmux里执行这个命令时,1F32D这个字符直接不见了;
- 用自定义脚本结合grep过滤字符:
unicode-list | grep -aPwi '00AE|1F007|1F32D|1F603'
这里1F32D和1F603两个字符都丢失了;
- 再加一个
tac反转输出后过滤:
unicode-list | tac | grep -aPwi '00AE|1F007|1F32D|1F603'
除了上面两个字符,有时候00AE也会跟着消失。
自定义脚本unicode-list说明
这个脚本是我自己写的,用来读取UnicodeData.txt并额外输出对应的实际字符,代码如下:
#!/usr/bin/env bash # prints UnitCodeData.txt with an additional column containing the actual character. f=/usr/share/unicode/ucd/UnicodeData.txt if [ ! -r "$f" ]; then echo "$f does not exist or is not readable" >&2 exit 2 fi while IFS= read -r line || [ -s "$line" ]; do code=${line%;*} echo -en "\\U$code;" echo "$line" done < "$f"
我的环境配置信息
- tmux版本:执行
cygcheck -c tmux得到以下输出:
Cygwin Package Information Package Version Status tmux 3.2-0 OK
- 区域设置:执行
locale的输出:
LANG=en_US.UTF-8 LC_CTYPE="de_DE.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="de_DE.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_ALL=
- ~/.tmux.conf配置:
set -g prefix F4 bind F4 send-prefix bind F5 copy-mode set -g set-titles on set -g set-titles-string '#{pane_title}' set -g status-fg white set -g status-bg black set -g window-status-current-style bg=white,fg=black set -g window-status-style bg=black,fg=gray set -g @plugin 'tmux-plugins/tpm' set -g @plugin 'tmux-plugins/tmux-sensible' set -g @plugin 'tmux-plugins/tmux-yank' # ______________________________________________________________________ # Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf) run '~/.tmux/plugins/tpm/tpm'
有没有朋友能帮我分析下,这到底是哪里出问题了呀?
备注:内容来源于stack exchange,提问作者EndlosSchleife
相关产品推荐
相关产品推荐

