Mor*_*gan 12 bash zsh international utf-8 macos
我刚开始使用 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
? ~
Run Code Online (Sandbox Code Playgroud)
使用 bash,它看起来像这样(在两种情况下,文件名rm -v都是通过按自动完成的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 ~ $
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题zsh?
编辑:
设置export LANG=en_US:UTF-8修复了 eg 的输出,ls并在TAB完成时有多个匹配项时在当前输入下方的行上正确显示它。但是,从TAB-completion 中选择文件它在输入行上显示了错误的方式,当只有一个匹配项时也是如此。
上面的例子现在看起来像这样zsh:
? ~ touch åäö.txt
? ~ ls
åäö.txy
? ~ rm -v a<030a>a<0308>o<0308>.txt
åäö.txt
? ~
Run Code Online (Sandbox Code Playgroud)
如果我有两个匹配TAB-completion 的文件,它看起来像这样:
? ~ touch åäö.txt
? ~ touch öäå.txt
? ~ rm
öäå.txt åäö.txt
Run Code Online (Sandbox Code Playgroud)
通过TAB再次按并使用箭头键选择上述之一,或按 a 或 o 以在完成前仅进行一个匹配会生成以下内容:
? ~ rm o<0308>a<0308>a<030a>.txt
? ~ rm a<030a>a<0308>o<0308>.txt
Run Code Online (Sandbox Code Playgroud)
关于出了什么问题的任何建议?
感谢@mpy 解决了 LANG 问题。答案是使用:
export LANG=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)
在您的.zshrc.
剩下的问题是由完成系统引起的。不幸的是,完成是一个怪物功能。它涉及 shell 函数,甚至可能是脚本被调用,并且在该过程中的某个地方可能 LANG 再次设置为错误的值。如果你有 root 权限,你可以调试这个 shell 脚本代码)。祝完成指南好运 。
| 归档时间: |
|
| 查看次数: |
13127 次 |
| 最近记录: |