Wie kann ich zsh dazu bringen, internationale Zeichen richtig anzuzeigen?

6032
Morgan

Ich habe gerade angefangen, zsh zu benutzen, und ich liebe es. Ich bin jedoch auf einen Ärger gestoßen, wenn es um internationale Charaktere geht:

➜ ~ 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 ➜ ~  

Mit Bash sieht es so aus (der Dateiname in rm -vwird TABin beiden Fällen durch Drücken automatisch ausgefüllt ).

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 ~ $  

Wie kann ich das beheben zsh?

BEARBEITEN:

Die Einstellung export LANG=en_US:UTF-8fixiert die Ausgabe von zB lsund zeigt sie auch korrekt in der Zeile unter der aktuellen Eingabe an, wenn mehrere Übereinstimmungen TABabgeschlossen sind. TABWenn Sie jedoch die Datei aus -completion auswählen, wird in der Eingabezeile der falsche Weg angezeigt. Dies gilt auch, wenn nur eine Übereinstimmung vorhanden ist.

Das obige Beispiel sieht nun so aus mit zsh:

➜ ~ touch åäö.txt  ➜ ~ ls  åäö.txy ➜ ~ rm -v a<030a>a<0308>o<0308>.txt åäö.txt ➜ ~  

Wenn ich zwei Dateien habe, die auf TAB-completion passen, sieht das so aus:

➜ ~ touch åäö.txt  ➜ ~ touch öäå.txt  ➜ ~ rm  öäå.txt åäö.txt 

Wählen Sie eine der oben genannten Optionen aus, indem Sie TABerneut drücken und die Pfeiltasten verwenden, oder drücken Sie a oder o, um vor dem Abschluss nur eine Übereinstimmung zu erzielen.

➜ ~ rm o<0308>a<0308>a<030a>.txt ➜ ~ rm a<030a>a<0308>o<0308>.txt 

Irgendwelche Vorschläge, was ist los?

6
Was ist die Ausgabe von `echo $ LANG` in` bash` bzw. "zsh"? mpy vor 11 Jahren 2
Es ist für beide leer. Ich bin übrigens auf OS X 10.8.3. Morgan vor 11 Jahren 0
Ok, dann bin ich raus (OS X), sorry. Aber versuch doch zB `LANG = de_US.UTF-8`. `zsh` sollte Ihnen alle Möglichkeiten mit` LANG = bieten`, aber en_US.UTF-8 funktioniert perfekt mit deutschen Umlauten. mpy vor 11 Jahren 0
`export LANG = de_US.UTF-8` hat die Ausgabe von 'ls' behoben, die automatische Vervollständigung zeigt jedoch noch 'a <030a> a <0308> oder <0308> .txt' Morgan vor 11 Jahren 0
Nur eine andere Idee: Haben Sie `zsh` selbst kompiliert? Wenn nicht, greifen Sie zur neuesten Quelle (http://zsh.sourceforge.net/Arc/source.html) und verwenden Sie unbedingt die Option. ./Configure --enable-multibyte`. Nach dem Erstellen von make starten Sie einfach `. / Src / zsh`, bevor Sie diese Version installieren. mpy vor 11 Jahren 0
Es wird mit Homebrew kompiliert / installiert. 5.0.2 mit "--enable-multibyte". Morgan vor 11 Jahren 0

4 Antworten auf die Frage

2
user829755

Danke @mpy für das Lösen des LANG-Problems. Die Antwort lautet:

export LANG=en_US.UTF-8 

in deiner .zshrc.

Das verbleibende Problem wird vom Abschlusssystem verursacht. Leider ist die Fertigstellung ein Monster-Feature. Dabei werden Shell-Funktionen oder vielleicht sogar Skripte aufgerufen und irgendwo in diesem Prozess wird möglicherweise LANG wieder auf einen falschen Wert gesetzt. Wenn Sie über Root-Berechtigungen verfügen, können Sie diesen Shell-Skriptcode debuggen. Viel Glück mit dem Abschlussleitfaden .

0
daniel Azuelos

Das Problem ist immer noch das selbe auf den letzten Versionen, zshdie mit Mac OS X10.8 (alias Mountain Lion), 10.9 (alias Mavericks) & 10.10 (alias Yosemite) kommen (ich bin immer noch im Beta-Test von 10.11 und kann keine Informationen darüber offenlegen). Die Fertigstellung von zshscheitert.

Die portVersion funktioniert zumindest mit Version 5.1.1 korrekt:

/usr/bin/sudo port install zsh 

Prüfung:

/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

Ich hatte das gleiche Problem in Arch Linux mit zsh.

Mit bash funktioniert alles gut, aber wenn ich zu zsh wechsle, wurden einige Zeichen falsch angezeigt (zB ñ, °).

Ich habe export LANG="en_US.UTF-8"zu mir hinzugefügt .zshrcund es ist nichts passiert.

Ich habe alles getan, um LANG in zsh zu setzen und nichts korrigiert.

Dann änderte ich meine Shell wieder bashmit chsh -s /bin/bashund ich bemerkte, dass mein Env var LANG falsch war und printenv LANGes zeigte mir LANG=C.

Dies ist eine Neuinstallation, also vergesse ich, eine /etc/locale.confDatei zu erstellen und meine Einstellungen vorzunehmen LANG="en_US.UTF-8"und nach dem Neustart funktioniert alles einwandfrei.

Hoffe das hilft.

0
Dmitriy

Versuchen

  1. Eine Powerline-kompatible Schriftart muss https://github.com/powerline/fonts installiert sein
  2. Festlegen dieser ENV-Variablen in .zshrc:
LANG = "de_US.UTF-8" LC_COLLATE = "de_US.UTF-8" LC_CTYPE = "de_US.UTF-8" LC_MESSAGES = "de_US.UTF-8" LC_MONETARY = "de_US.UTF-8" LC_NUMERIC = "de_US.UTF-8" LC_TIME = "de_US.UTF-8" LC_ALL = "de_US.UTF-8"