bash から zsh への乗り換え
完全に個人的なメモ。
macOS Catalina から、標準シェルが zsh に変更された。 特に bash で困ってないけど、 shell 開くたびに以下のようなメッセージが出てくるのも耐え難いので、今更だけど乗り換えることにした。
The default interactive shell is now zsh. To update your account to use zsh, please run `chsh -s /bin/zsh`. For more details, please visit https://support.apple.com/kb/HT208050.
操作面はさておいて、乗り換えで大切なのは dotfiles の扱い。
現時点で .bash_profile
と .bashrc
を以下のように設定しているので、これらを円滑に移行する。
一応、 zsh の設定系の framework として、以下のようなものがあるらしいけど、細かいカスタマイズこそが shell の醍醐味じゃろってことで使わない。 (とかいいつつ、特に .bashrc とかメンテしてなかったけど...)
framework よりは控えめな plugin manager 系のツールもいろいろあるようなので、不便を感じたらこちらは使ってもよいかも。 (結構カオス状態だな...)
とりあえず、今回はカスタムでやってみるのです。
.bash_profile
と .bashrc
の内容を .zshrc
に全てまとめる。
また、 zsh の便利機能的なものもちょいちょい追加。
history のオプションに関して、 INC_APPEND_HISTORY
と SHARE_HISTORY
の違いが少しわかりにくかったので、メモ。
デフォルトでは、 HISTFILE へは、 shell が exit するタイミングで書き込まれるんだけど、 INC_APPEND_HISTORY
を有効にすると、コマンドが発行される度 (実行前に) HISTFILE に書き込まれるようになる。ただ、これだけだと、他の window で開いている shell からは、この HISTFILE に書き込まれた履歴は使われない。(メモリ上にある、各 shell ごとに管理されている履歴が使われる)
SHARE_HISTORY
を有効にすると、 INC_APPEND_HISTORY
の効果にプラスして、他の window で開いている shell からも即座に、 HISTFILE に書かれた履歴が使われるようになる。別にそこまでは望まないかなっていう場合は INC_APPEND_HISTORY
を使えばいい。
なお、 INC_APPEND_HISTORY_TIME
というオプションを有効にすると、コマンド開始時刻だけでなく、実行時間も書き込まれる。 (つまりコマンド終了時に書き込まれる)
INC_APPEND_HISTORY
, INC_APPEND_HISTORY_TIME
, SHARE_HISTORY
は互いに排他的なオプションとなっている。
prompt での Git のステータス表示に関しては、 vcs_info
というモジュールを使ってみた。
push や stash のステータス表示を標準ではサポートしていないようで、以前に比べてそのあたりは不満はあるけど、カスタマイズはできるらしいし、まずは標準のまま使ってみる。
(追記) 早速だけど、やっぱり不便を感じたし、 VCS っていってもほぼ Git しか使わないので、以前と同様 Git 公式の git-prompt.sh を使って、 prompt 表示を行うことにした。
補完系に bash では scop/bash-completion を使っていた。 zsh は標準でもある程度のコマンド群をサポートしてくれているみたいだけど、追加で主要なものを追加しておく。
curl -L https://raw.githubusercontent.com/docker/cli/master/contrib/completion/zsh/_docker > ~/.zsh.d/completions/_docker curl -L https://raw.githubusercontent.com/docker/compose/master/contrib/completion/zsh/_docker-compose > ~/.zsh.d/completions/_docker-compose
また 3rd-party 製のものが zsh-users/zsh-completions に公開されているので、これも使用する。
git clone git://github.com/zsh-users/zsh-completions.git ~/.zsh.d/completions/zsh-completions mv ~/.zsh.d/completions/zsh-completions/src/* ~/.zsh.d/completions/ rm -rf ~/.zsh.d/completions/zsh-completions
最終的にこんな感じになった。たぶん、使いながらちょいちょい変更することにはなるだろう。
最後に以下のコマンドでバッツん切り替える。
chsh -s /bin/zsh
References
- zsh: 15 Parameters
- zsh: 16 Options
- Use zsh as the default shell on your Mac - Apple Support
- zshのhistoryを便利に使うためのTips - Qiita
- 最強のシェル zsh - Qiita
- 初心者向け:Zshの導入 - Qiita
- zshのオプション設定の分かりにくいところまとめ - Qiita
- Zsh 入門者のための超速設定ガイド - Qiita
- .zshrcの設定例(設定内容の説明コメント付き) - Qiita
- めんどくせーからzshrcそのまま晒す - Qiita
- zshrcを見直してまとめる - Qiita
- Shellライフをそこそこ快適に!僕のこだわりzsh設定
- 【連載】漢のzsh | マイナビニュース
- bashとzshの違い。bashからの乗り換えで気をつけるべき16の事柄
- zshで究極のオペレーションを:連載|gihyo.jp … 技術評論社
- dotfiles/zshrc at master · joshtronic/dotfiles
- Preztoによるzshプラグインの導入: 黄昏てなんかいられない
- Zshプラグインをzgenでシンプルに管理する - longkey1's blog
- シェルスクリプトでの関数の書き方について
- zshでプロンプトをカラー表示する - Qiita
- shell - zsh config - to export or not to export? - Super User
- zshのターミナルにリポジトリの情報を表示してみる · けんごのお屋敷
- zsh の vcs_info に独自の処理を追加して stash 数とか push していない件数とか何でも表示する - Qiita
- Git - Git in Zsh
- [macOS]zshでgitのブランチ名を表示させる - 村上 幸雄 - Medium
- zshのメニュー補完で候補をインタラクティブに絞り込む - Qiita
- 今更ながらzshのREPORTTIME便利 - キモブロ
- command line - CTRL-a and CTRL-e map incorrectly in tmux - Ask Ubuntu
- よく実行するコマンドにキーバインドを割り当てると捗る話 - Qiita