Как заставить 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, вы можете отлаживать этот код сценария оболочки). Удачи с руководством по завершению.

Пытаться

  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"

У меня была такая же проблема в 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é
%

Другие вопросы по тегам