如何让 zsh 正确显示国际字符?

如何让 zsh 正确显示国际字符?

我刚开始使用 zsh,并且很喜欢它。然而,在处理国际字符时,我遇到了一个烦恼:

➜  ~  touch åäö.txt               
➜  ~  ls                          
Desktop       Dropbox       Music         Sites
Documents     Library       Pictures      a??a??o??.txt
Downloads     Movies        Public
➜  ~  rm -v a<030a>a<0308>o<0308>.txt
åäö.txt
➜  ~  

rm -v使用 bash 它看起来像这样(在两种情况下,按下即可自动完成文件名TAB)。

johan@retina ~ $ touch åäö.txt
johan@retina ~ $ ls
Desktop       Dropbox       Music         Sites
Documents     Library       Pictures      åäö.txt
Downloads     Movies        Public
johan@retina ~ $ rm -v åäö.txt 
åäö.txt
johan@retina ~ $ 

我该如何修复这个问题zsh

编辑:

设置export LANG=en_US:UTF-8修复了 eg 的输出ls,并且当TAB-completion 上有多个匹配项时,它会在当前输入下方的行上正确显示。但是,从 -completion 选择文件时,TAB它会在输入行上显示错误的方式,当只有一个匹配项时也是如此。

上面的例子现在看起来像这样zsh

➜  ~  touch åäö.txt               
➜  ~  ls                          
åäö.txy
➜  ~  rm -v a<030a>a<0308>o<0308>.txt
åäö.txt
➜  ~  

如果我有两个文件在TAB-completion 上匹配,它看起来像这样:

➜  ~  touch åäö.txt               
➜  ~  touch öäå.txt                          
➜  ~  rm 
öäå.txt    åäö.txt

再次按下并使用箭头键选择上述内容之一TAB,或者按 a 或 o 在完成之前仅进行一次匹配,则会生成以下内容:

➜  ~  rm o<0308>a<0308>a<030a>.txt
➜  ~  rm a<030a>a<0308>o<0308>.txt

对于哪里出了问题,您有什么建议吗?

答案1

感谢@mpy 解决 LANG 问题。答案是使用:

export LANG=en_US.UTF-8

在你的.zshrc

剩下的问题是由完成系统引起的。不幸的是,完成是一个怪物功能。它涉及调用 shell 函数或甚至脚本,并且在该过程中的某个地方可能再次将 LANG 设置为错误值。如果您有 root 权限,您可以调试此 shell 脚本代码)。祝你好运 完成指南

答案2

尝试

  1. 安装 Powerline 兼容字体https://github.com/powerline/fonts
  2. 设置这些 ENV 变量.zshrc
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8"

答案3

我在 Arch Linux 中使用 zsh 遇到了同样的问题。

使用 bash 一切正常,但是当我切换到 zsh 时,某些字符显示错误(例如 ñ、°)。

我已经添加了export LANG="en_US.UTF-8".zshrc但什么也没发生。

我已尽一切努力在 zsh 中设置 LANG,但没有任何效果。

然后我将我的 shell 改回bashwith chsh -s /bin/bash,并注意到我的环境变量 LANG 是错误的,printenv LANG它向我显示了LANG=C

这是一个新安装,所以我忘记创建/etc/locale.conf文件并设置我的 LANG="en_US.UTF-8",重新启动后一切都完美运行。

希望这可以帮助。

答案4

zsh最新版本10.8(又名 Mountain Lion)、10.9(又名 Mavericks)和 10.10(又名 Yosemite)也存在同样的问题Mac OS X(我仍在对 10.11 进行 beta 测试,因此无法透露相关信息)。zsh失败。

port版本至少在 5.1.1 版本中可以正常运行:

/usr/bin/sudo port install zsh

测试:

/opt/local/bin/zsh

% touch hølé
% ls -l htab
→ ls -l hølé
% -rw-r--r-- 1 bob wheel 0 Apr 2 18:49 hølé
%

相关内容