完全に個人的なメモ。
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