シェルのなかで、至高の利便性を誇ると言われているzshを試してみました。きっかけは、この本を読んだので。作業メモを兼ねて、簡単に使い方を書きます。
zshとは
zshとは、シェルの種類のひとつ。Bashやtcshなどの、全てのシェルのいいとこどりをして開発された至高のシェル。“z"というのは、これで” これでシェルは完成で終わりだよ" という意味。
zsh導入まで
zshインストール方法
Cygwinパッケージに含まれているので、setup.exeかapt-cygで取得します。
$ apt-cyg install zsh
$ zsh --version
zsh 5.0.2 (i686-pc-cygwin)
zshと打ち込むとzshになります。入力のためのコンソールが%になりました。
# zshに切り替える
zsh
zshをログインシェルにする
ログインしたときに、zshが起動するように設定します。
# ログインシェルの確認
% echo $SHELL
/bin/bash
普通はchshを利用するけれども、Cygwinではそれがない!なので、/etc/passwdを直接書き換えます。
% emacs /etc/passwd
# 変更前
tsu-nera:unused:1000:513:U-TSUNEMICHI-VAIO\TSUNEMICHI,S-1-5-21-2209003112-325970183-628590984-1000:/home/TSUNEMICHI:/bin/bash
# 変更後
tsu-nera:unused:1000:513:U-TSUNEMICHI-VAIO\TSUNEMICHI,S-1-5-21-2209003112-325970183-628590984-1000:/home/TSUNEMICHI:/usr/bin/zsh
すると、CygwinやCygtermはみごとzshで起動。しかし、母艦terminalのminttyだけがbashのまま・・・・(´・ω・`)。
いろいろと頑張ること1時間・・・ついにわかった!(・∀・)
ユーザ環境変数で、$SHELLがbashだった。
コントロールパネル - > システム -> システムの詳細設定 -> 環境変数からユーザ環境変数の設定画面へ。/bin/bashをを/usr/bin/zshに変更することで、minttyもzshで起動するようになった(^O^)
.zshrcの作成
.zshrcを作成すると、ログイン時に読み込まれる。$HOMEディレクトリにまずは作成。
touch .zshrc
.zshrcに書く内容は、いろんなサイトを参考に作ってみた。
自分の.zshrcファイルを公開 - 世界中の羊をかき集めて
あと、zsh最強シェル入門の本も参考にした。以下、便利そうなのをつまんで紹介。
screenで端末間のヒストリ機能の共有
zshは強力なヒストリ機能が魅力。特に、screenコマンドを使っていると、端末で実行したコマンドを全て共有したい場合がある。zshならば、端末ごとの共有だってできてしまう。以下2つの設定で有効になる。
## Screenでのコマンド共有用
## シェルを横断して.zshhistoryに記録
setopt inc_append_history
## ヒストリを共有
setopt share_history
他にも、重複排除などの機能もたくさん。
カレントディレクトリの表示
zshを利用すると、コンソール上にカレントディレクトリも表示することができる。もうpwdなんていらないのである。設定は以下。
# 色有効
autoload -U colors
colors
# 色を定義
local GREEN=$'%{\e[1;32m%}'
local BLUE=$'%{\e[1;34m%}'
local DEFAULT=$'%{\e[1;m%}'
# 通常のプロンプト
PROMPT=$BLUE'[%n]%# '$WHITE
# 右側のプロンプト。ここでカレントディレクトリを出す。
RPROMPT=$GREEN'[%~]'$WHITE
setopt transient_rprompt
グローバルエイリアスの設定
グローバルエイリアスを設定することで、コマンドの任意の場所で展開できるようになる。zshだけの機能。
例えば、ls -l L と入力すると、ls -l | less というように変換される。
alias -g L='| less'
alias -g H='| head'
alias -g T='| tail'
alias -g G='| grep'
alias -g GI='| grep -i'
Cygwinでwindowsパス形式のWaringを抑止する
zshでの操作の途中でこんなエラーが出る。
MS-DOS style path detected: ./.zshrc\~
Preferred POSIX equivalent is: ./.zshrc/~
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
https://cygwin.com/cygwin-ug-net/using.html#using-pathnames
これは、CygwinがWindowsパス形式をWaringとするため。コントロールパネル - > システム -> システムの詳細設定 -> 環境変数からシステム環境変数の設定画面へ。
CYGWIN=nodosfilewarningというように、環境変数追加するとよい。
他にも便利そうな機能はたくさんあるけれども、とりあえずはこのへんでやめておく。