Cygwin mintty 中的 tmux - 根据命令破坏 unicode 字符

Cygwin mintty 中的 tmux - 根据命令破坏 unicode 字符

请帮助我理解为什么某些 unicode 字符在某些命令输出中可以在 mintty + tmux 中正确显示,但在其他命令输出中却不行。

示例命令:

for c in 00AE 1F007 1F32D 1F603; do printf '%s\t' "$c"; bash -c "echo -e '\U$c'"; done

unicode-list | grep -aPwi '00AE|1F007|1F32D|1F603'

unicode-list | tac | grep -aPwi '00AE|1F007|1F32D|1F603'

这是我的 Cygwin mintty + zsh(不带 tmux),正确显示四个示例字符: 没有 tmux

以下是同一个 mintty 中但在 tmux 内部的相同命令: tmux 内部 因此,在第一个命令 ( bash echo -e) 中,字符 1F32D 丢失。在第二个命令 ( unicode-list+ 管道到grep) 中,1F32D 和 1F603 丢失。再添加一个管道到tac以反转顺序,00AE 可能也会丢失。

命令unicode-list是这个脚本:

#!/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"

我的配置:

» 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'

这里发生了什么?

相关内容