我刚开始使用 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
尝试
- 安装 Powerline 兼容字体https://github.com/powerline/fonts
- 设置这些 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 改回bash
with 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é
%