ZSH以降に遭遇したピットに切り替える

4380 ワード

ZSHの強さを知り、現在使っているbashをZSHに切り替えたい.具体的にZSHはbashより强くないので、ネット上の文章を探してみましょう.個人的には主にZSHの強力な自動補完に惹かれてきた.bashはbash-completaionを装着して以降も一定の自動補完能力を持っているが、ZSHと比べるとやはり差が大きい.
ZSHは機能が強いが、構成が煩雑で、shellスクリプトの文法はずっと奇抜で、自分でカスタマイズするにはshellスクリプトに対して一定の理解が必要である.ZSHで時間を節約したいと思っていましたが、ZSHを配置するのに多くの時間がかかるのは、多くのプログラマーを退却させるに違いありません.幸いgithubはoh-my-ZSHというプロジェクトがあって、自動的に大量の配置をあなたにして、基本的に箱を開けてすぐに使うことができました.
具体的には、ZSHのインストールとoh-my-zshの構成については、https://github.com/robbyrussell/oh-my-zshを参照してください.
インストールが完了したら、chsh -s /bin/zshを実行して、現在のデフォルトのshellをzshに切り替えます.他にやるべきことは、以前~/.bash_プロファイルの構成を~/にコピーする.zshrcでは、以前bashで定義した別名、コマンドなどが正常に動作することを保証します.
ZSHシームレス互換bashといっても、使い始めたばかりなのに穴があいて、どうにか一つ一つ解決しました.

コーディングの問題


Octopressブログの生成ブログコマンドを実行すると、この奇妙なエラーに遭遇しました.
1
2
3
$ rake generate  YAML Exception reading 2013-12-15-responsive-menu-by-media-queries.markdown: invalid byte sequence in US-ASCII 

デフォルト符号化の問題のように見えますが、ZSHで使用されているデフォルト符号化はUS-ASCIIですが、私が望んでいるのはUTF-8です.
OK、現在のzsh shellの符号化を確認します.
1
2
3
4
5
6
7
8
9
$ locale LANG= LC_COLLATE="C" LC_CTYPE="C" LC_MESSAGES="C" LC_MONETARY="C" LC_NUMERIC="C" LC_TIME="C" LC_ALL= 

値が設定されていないため、ZSHはUS-ACSCIIを選択した.
解決策も簡単で、~/.zshrcに以下の2行を加えます.
~/.zshrc
1
2
3
4
5
6
7
8
9
export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8``` zshrc 。$ source ~/.zshrc$ locale # Compilation flagsLANG="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” 

ワイルドカードの問題


また、コマンドラインに[]*などの文字がzshに優先されてワイルドカードとして処理され、ZSHエラーで解析されるコマンドもあることに気づきました.
例:
1
$ rake new_post[‘a new post’] 

ここの[]はルビー言語の文法ですが、ZSHによってワイルドカードに解析されたため、エラーとなります.解决方法も简単で、ZSHのこの特性を闭じます.
にありますzshrcに次の行を加えるとできます.
1
setopt no_nomatch