web-dev-qa-db-ja.com

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-完了入力行に間違った方法が表示されます。一致するものが1つしかない場合も同様です。

上記の例は、zshで次のようになります。

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

一致する2つのファイルがある場合 TAB-完了は次のようになります。

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

を押して上記のいずれかを選択します TAB もう一度矢印キーを使用するか、aまたはoを押して、完了する前に1つだけ一致させると、次のようになります。

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

何が問題なのかについて何か提案はありますか?

9
Morgan

LANGの問題を解決してくれた@mpyに感謝します。答えは使用することです:

export LANG=en_US.UTF-8

あなたの.zshrc

残りの問題は、完了システムが原因です。残念ながら、完成はモンスターの特徴です。これには、シェル関数またはおそらく呼び出されるスクリプトが含まれ、そのプロセスのどこかで、おそらくLANGが再び間違った値に設定されます。 root権限を持っている場合は、このシェルスクリプトコードをデバッグできます)。 完了ガイド で頑張ってください。

5
user829755

試してみてください

  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" 
1
Dmitriy

Zshを使用したArchLinuxでも同じ問題が発生しました。

Bashを使用すると、すべてが正常に機能しますが、zshに切り替えると、一部の文字が正しく表示されませんでした(例:ñ、°)。

export LANG="en_US.UTF-8".zshrcに追加しましたが、何も起こりませんでした。

Zsh内にLANGを設定するためにすべてを行いましたが、何も修正されていません。

次に、シェルをchsh -s /bin/bashbashに戻しましたが、printenv LANGでenvvarLANGが間違っていることに気付きました。LANG=Cが表示されました。

これは新規インストールなので、/etc/locale.confファイルを作成してLANG="en_US.UTF-8"を設定するのを忘れ、再起動するとすべてが完全に機能します。

お役に立てれば。

0
Hernan Garcia

問題は、Mac OS X 10.8(別名Mountain Lion)、10.9(別名Mavericks)、および10.10(別名Yosemite)に付属するzshの最後のバージョンでも同じです(私はまだ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
dan