Как заставить zsh правильно отображать международные символы?

5910
Morgan

Я только начал использовать 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фиксирует вывод команды eg, lsа также правильно отображает его в строке под текущим вводом, когда при TAB-completion несколько совпадений . Однако, выбрав файл из TAB-completion, он показывает неправильный путь в строке ввода, то же самое относится и к тому, когда есть только одно совпадение.

Приведенный выше пример теперь выглядит так 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 

Любые предложения о том, что не так?

6
Что выводит `echo $ LANG` в` bash` соотв. `Zsh`? mpy 11 лет назад 2
Это пусто для обоих. Я на OS X 10.8.3, кстати. Morgan 11 лет назад 0
Хорошо, тогда я вышел (OS X), извините. Но попробуйте все же, например, `LANG = en_US.UTF-8`. `zsh` должен предложить вам все возможности с` LANG =`, но en_US.UTF-8 отлично работает с немецкими умлаутами. mpy 11 лет назад 0
`export LANG = en_US.UTF-8` исправил вывод` ls`, однако автозаполнение все еще показывает `a <030a> a <0308> o <0308> .txt` Morgan 11 лет назад 0
Просто еще одна идея: вы сами компилировали `zsh`? Если нет, возьмите последний источник (http://zsh.sourceforge.net/Arc/source.html) и обязательно используйте `./configure --enable-multibyte`. После `make` просто попробуйте запустить`. / Src / zsh` перед установкой этой версии. mpy 11 лет назад 0
Это скомпилировано / установлено с помощью homebrew. 5.0.2 с `--enable-multibyte`. Morgan 11 лет назад 0

4 ответа на вопрос

2
user829755

Thanks @mpy for solving the LANG problem. The answer is to use:

export LANG=en_US.UTF-8 

in your .zshrc.

The remaining problem is caused by the completion system. Unfortunately completion is a monster feature. It involves shell functions or perhaps even scripts being called and somewhere in that process possibly LANG is again set to a wrong value. If you have root privileges you can debug this shell script code). Good luck with the completion guide.

0
daniel Azuelos

Проблема все та же на последних версиях, zshкоторые поставляются с Mac OS X10.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é
%

0
Hernan Daniel Garcia Sifontes

У меня была такая же проблема в Arch Linux с использованием Zsh.

При использовании bash все работает нормально, но когда я переключаюсь на zsh, некоторые символы отображаются неправильно (например, ñ, °).

Я добавил export LANG="en_US.UTF-8"к своему, .zshrcи ничего не произошло.

Я сделал все, чтобы установить LANG внутри Zsh и ничего не исправляет.

Тогда я изменил мою оболочку обратно bashс, chsh -s /bin/bashи я заметил, что мой окр вар LANG не так с printenv LANGон показал мне LANG=C.

Это новая установка, поэтому я забываю создать /etc/locale.confфайл и установить его, LANG="en_US.UTF-8"и после перезапуска все работает отлично.

Надеюсь это поможет.

0
Dmitriy

Пытаться

  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"