zsh入門してみたら便利すぎて鼻息が抑えられない
「シェル?ターミナルでコマンド叩くだけでしょ。デフォルトのbashで十分」
そう思っていた僕ですが、漢のzshを見て考えが180度変わりました。zshスゴイ。愛してる。
zshはどうにも情報が得にくくて敬遠していたけど*1、漢のzshは分かりやすくて素晴らしい!僕も漢としての第一歩を踏み出せそうな気がしてきました。
連載の5回まで読んでやってみたので、記録しておきます。
まずはbashにお別れ
最初はターミナルでzshを叩いて試してたけど、やればやるほどデフォルトで良いんじゃないか、いやむしろデフォルトでお願いします、という気持ちが強くなったので、ログインシェルを変更。さよならbash、今までありがとう。
$ chsh -s /bin/zsh
これで、次回以降は最初からzshが使えます。
ところでzshって何て読むの?
「ぜっとしぇる」で正しいはず!
Z Shell - Wikipedia
漢の道程
.zshrcを作り、bashの設定を引き継ぐ
zshは設定を.zshrcに書く。
ホームディレクトリに.zshrcファイルを作り、.bashrcや.bash_profileに書いていた設定を適宜コピー。丸ごとコピーでもいいのかな?
あとは、.zshrcにゴリゴリ設定を書いて興奮しまくればよし!
.zshrcの編集と読み込み
.zshrcを編集したら、
% source ~/.zshrc
で再度読み込むことができる。
補完機能
# 補完機能 autoload -U compinit compinit
これで、補完機能が使える。Tabでコマンド名やオプションなど、色々補完できる!
プロンプト
【コラム】漢のzsh (2) 取りあえず、プロンプトを整えておく。カッコつけたいからねの例とほとんど同じ。
# プロンプトの設定 case ${UID} in 0) PROMPT="%{^[[31m%}%n%%%{^[[m%} " RPROMPT="[%~]" PROMPT2="%B%{^[[31m%}%_#%{^[[m%}%b " SPROMPT="%B%{^[[31m%}%r is correct? [n,y,a,e]:%{^[[m%}%b " [ -n "${REMOTEHOST}${SSH_CONNECTION}" ] && PROMPT="%{^[[37m%}${HOST%%.*} ${PROMPT}" ;; *) PROMPT="%{^[[31m%}%n%%%{^[[m%} " RPROMPT="[%~]" PROMPT2="%{^[[31m%}%_%%%{^[[m%} " SPROMPT="%{^[[31m%}%r is correct? [n,y,a,e]:%{^[[m%} " [ -n "${REMOTEHOST}${SSH_CONNECTION}" ] && PROMPT="%{^[[37m%}${HOST%%.*} ${PROMPT}" ;; esac
上記設定の"^["は文字列ではなくエスケープ記号なので、そのままコピペすると動かない。
Emacsなら、置換対象を"^["、置換文字を"C-q ESC"で変換すると動く。
プロンプトが「ユーザー名% 」になっていて、現在のパスを右側に表示するようにした。
パスを右側表示にすると、左プロンプトの長さが一定になってこれがなにげに快適!
コマンド履歴
指定したファイルに、実行したコマンドの履歴が記録される。重複するものは記録しないし、一度入力したコマンドは後述の履歴検索からすべて辿れるようになる。すごいぞzsh!
# コマンド履歴 HISTFILE=~/.zsh_history HISTSIZE=6000000 SAVEHIST=6000000 setopt hist_ignore_dups # ignore duplication command history list setopt share_history # share command history data
コマンド履歴検索
以下の設定で、コマンドの履歴を検索できる。
# コマンド履歴検索 autoload history-search-end zle -N history-beginning-search-backward-end history-search-end zle -N history-beginning-search-forward-end history-search-end bindkey "^P" history-beginning-search-backward-end bindkey "^N" history-beginning-search-forward-end
Ctrl-P/Ctrl-Nで、入力中の文字から始まるコマンドの履歴が表示される。"l"と入力した状態でCtrl-Pを押すと、"ls"や"less"が次々に表示されていく。
bashだと"!hoge"でhogeから始まる最後のコマンドを実行できるけど、使い勝手が悪かった。zshのこの設定の方が無理がなくて素敵ですね!
その他いろいろ
# ディレクトリ名を入力するだけで移動 setopt auto_cd
"cd"を入力しなくても移動できるようになる!
"~"とか".."とだけ打てば動けるのは、ありがたい。
# 移動したディレクトリを記録しておく。"cd -[Tab]"で移動履歴を一覧 setopt auto_pushd
"cd -[Tab]"で、移動履歴が表示されるようになる。
ひとつ前にいたディレクトリに戻りたいけど、パスが長くて面倒・・・という時に効果絶大!
# コマンド訂正 setopt correct
コマンドを打ち間違えた時に、近いコマンドを提案してくれる。何この便利機能、賢すぎる!
# 補完候補を詰めて表示する setopt list_packed
Tabで補完候補を表示する際、画面に収まらない場合は表示間隔を詰めてなるべく収まるようにしてくれる。細かいところで気が利いてるなぁ〜。
# 補完候補表示時などにピッピとビープ音をならないように設定 setopt nolistbeep
ビープ鳴りまくると結構ストレスなので、設定しておきます。
# Emacsライクキーバインド設定 bindkey -e
最初からEmacs風キーバインドだと思うんだけどな?いちおう、これも設定。
vim使いにはvim風キーバインド設定もありますよ!
zshはよいものだ
まだ全然理解できていませんが、とても使いやすいということは分かりました。
色々と調べて、もっと使いこなせるようになりたいです!
*1:そもそもシェルをいじったり変えようとしたことがなかった