Как заставить 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
➜ ~
С 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 ~ $
Как я могу это исправить с zsh
?
РЕДАКТИРОВАТЬ:
настройка export LANG=en_US:UTF-8
исправляет вывод например ls
и также показывает это правильно в строке под текущим вводом, когда есть несколько совпадений на TAB- завершении. Тем не менее, при выборе файла в TAB-completion он показывает неправильный путь в строке ввода, то же самое происходит, когда есть только одно совпадение.
Приведенный выше пример теперь выглядит следующим образом: zsh
:
➜ ~ touch åäö.txt
➜ ~ ls
åäö.txy
➜ ~ rm -v a<030a>a<0308>o<0308>.txt
åäö.txt
➜ ~
Если у меня есть два файла, совпадающие на TAB- дополнении, это выглядит так:
➜ ~ 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
Любые предложения о том, что не так?
4 ответа
Спасибо @mpy за решение проблемы с LANG. Ответ должен использовать:
export LANG=en_US.UTF-8
в вашем .zshrc
,
Оставшаяся проблема вызвана системой завершения. К сожалению завершение - особенность монстра. Он включает в себя функции оболочки или, возможно, даже вызов скриптов, и где-то в этом процессе, возможно, LANG снова установлен в неправильное значение. Если у вас есть привилегии root, вы можете отлаживать этот код сценария оболочки). Удачи с руководством по завершению.
Пытаться
- Установленный шрифт, совместимый с 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"
У меня была такая же проблема в Arch Linux с использованием Zsh.
При использовании bash все работает нормально, но когда я переключаюсь на zsh, некоторые символы отображаются неправильно (например, ñ,°).
я добавил export LANG="en_US.UTF-8"
к моему .zshrc
и ничего не случилось
Я сделал все, чтобы установить LANG внутри Zsh и ничего не исправляет.
Затем я изменил свою оболочку обратно bash
с chsh -s /bin/bash
и я заметил, что мой env var LANG был не прав с printenv LANG
это показало мне LANG=C
,
Это новая установка, поэтому я забываю создать /etc/locale.conf
файл и установить мой LANG="en_US.UTF-8"
и после перезапуска все работает отлично.
Надеюсь это поможет.
Проблема все та же на последних версиях zsh
которые идут с Mac OS X
10.8 (он же Mountain Lion), 10.9 (он же Mavericks) и 10.10 (он же Yosemite) (я все еще бета-тестирую 10.11 и не могу раскрыть информацию о нем). Завершение 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é
%