[Mac] oh-my-zshからzinitに乗り換えたらいい感じになった
はじめに
5年以上前にMacで zsh + oh-my-zsh の構成を使い始めて以来、ずっとほぼ設定を変更することなくダラダラと使い続けていたのですが、重い腰を上げてもうちょいイマドキな環境に乗り換えてみることにしました。
oh-my-zshの乗り換え先として Prezto の名前をよく聞いていましたが、なんか最近は zinit がイケてるっぽいのでこれを入れることにしました。
zinitは
- 起動が速い
- oh-my-zshやPreztoのプラグイン資産を使える
ことが特徴みたいです。よさそうですね✨
1. oh-my-zshをアンインストール
まずは「今までありがとう」と心の中で呟きながらoh-my-zshをアンインストールします。
README に書かれているとおり uninstall_oh_my_zsh
を実行するだけでOKです。( ~/.oh-my-zsh
が削除されます)
$ uninstall_oh_my_zsh
あわせて、 ~/.zshrc
に書いていたoh-my-zsh向けの設定を削除します。
僕の場合はほぼ サンプルテンプレート のとおりにしてあったので、これを丸っと削除します。(diff)
2. zinitをインストール
README に書かれているとおり、ワンライナーで簡単にインストールできます。
$ bash -c "$(curl --fail --show-error --silent --location https://raw.githubusercontent.com/zdharma-continuum/zinit/HEAD/scripts/install.sh)"
# 途中、Enter y/n and press Return: と聞かれたら y を入力
これにより、 ~/.zshrc
にzinit用の設定が追記されます。(diff)
最後に、 ~/.zshrc
を再読み込みして、zinit自体を最新化すればインストールは完了です。
$ source ~/.zshrc
$ zinit self-update
3. プラグインを入れたり設定を変更したり
ここからはお好みで ~/.zshrc
を修正して各種便利プラグインを入れたり細かい設定を変更したりしていきます。
READMEの例から必要そうなものをコピペ
僕の場合はほとんどこだわりがないので、とりあえずREADMEに書かれている例を参考に
zinit light zsh-users/zsh-autosuggestions
zinit light zdharma/fast-syntax-highlighting
zinit load zdharma/history-search-multi-word
あたりを追記しました。
補完の色を薄く
このままだと補完部分の色が通常の色と同じで、どこまでが実際に打った文字でどこからが補完なのかが視認できなくてとても不便なので、zsh-256color を入れます。(diff)
zinit light chrissicool/zsh-256color
ちなみに、補完部分の色は zsh-autosuggestions が ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE
という 環境変数によって決定しています。
.zshrc
の中で
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#ff00ff,bg=cyan,bold,underline"
のように定義してあげれば自由に表現を変更できます。( zsh-256color
との併用が前提です)
デフォルトではシンプルな灰色になります。
oh-my-zshプラグインをいくつかインストール
以下のoh-my-zshプラグインは以前から気に入って使っていたので、これは追加で入れておきます。(diff)
- gitコマンドのエイリアスがたくさん入っている oh-my-zshのgitプラグイン
- composer コマンドのエイリアスがたくさん入っている oh-my-zshのcomposerプラグイン
-
Symfony の
bin/console
をsf
で打てるようにする symfony.plugin.zsh - gitの変更状態が分かるlsコマンド
k
を導入してくれるsupercrabtree/k
ちなみに、便利プラグイン探しには awesome-zsh-plugins が大変便利です。
補完をcase-insensitiveに
oh-my-zshは .zshrc
に CASE_SENSITIVE="true"
と書かない限りデフォルトでcase-insensitive(補完の際に大文字・小文字を区別しない)でしたが、zinitはそうではないので、
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
という設定を追記してcase-insensitiveにします💪
補完候補をカーソルで選択できるように
oh-my-zshではデフォルトで補完候補をカーソルで選択できるようになっていました。これは便利で気に入っていたので設定を書いて対応させます。(diff)
autoload -U compinit
compinit
zstyle ':completion:*:default' menu select=1
スラッシュを単語の区切りと見なすように
Ctrl+W
や Option+Backspace
で単語ごとに削除していくときに、zshのデフォルトでは /
も単語の一部と見なされてしまい不便です。
oh-my-zshではデフォルトで設定が変更されていました。これも設定を変更して解決しておきます。
ググると大体以下のような内容が見つかるのですが、2020年11月時点で僕の環境だと上手く行きませんでした🤔
試行錯誤の結果、
autoload -Uz select-word-style
select-word-style bash
WORDCHARS='.-'
で解決できました。(diff)
WORDCHARS
環境変数は、「英数字以外で単語の一部と見なす文字」を定義しているもののようで、デフォルトだと以下の内容になっていて /
も含めた様々な記号が単語の一部と見なされてしまっていました。
$ echo $WORDCHARS
*?_-.[]~=/&;!#$%^(){}<>
今回は、 .
と -
だけは単語の一部と見なし、それ以外の記号はすべて区切り文字として扱うようにしました。この辺はお好みで調整するとよいでしょう✋
設定再読み込みでプラグインをインストール
.zshrc
を編集し終えたら、
$ source ~/.zshrc
で再読み込みするとバババーっとプラグインのインストールが実行されて、いろいろ使える状態になります🙌
サンプルからコピペした設定によって zdharma/history-search-multi-word が入っているので
Ctrl+r
でコマンド履歴を検索できるのがめっちゃ便利ですね!今までこのプラグイン知らなかったのは人生損してました。
4. テーマを変更する
zinitでは、oh-my-zshのテーマを使って見た目をカスタマイズ できます。
最初は特に変更しなくていいかなと思ったのですが、ターミナルを黒背景で使っている僕にはデフォルトの色味は視認性が低すぎたので、慣れ親しんだoh-my-zshのデフォルトテーマである robbyrussell を入れることにしました😇
zinitのREADMEに書かれているとおり、テーマ機構を使うには前提として OMZL::git.zsh
をインストールする必要があります。
zinit snippet OMZL::git.zsh
その上で、 OMZT::robbyrussell
をインストールすることでテーマが適用されます。
zinit snippet OMZT::robbyrussell
ただ、この状態だと文字色が変化せずすべて白で表示されてしまいました。
ググった結果、テーマによっては OMZL::theme-and-appearance.zsh
や OMZL::spectrum.zsh
に依存しているものがある ようで、これらを追加でインストールすることでちゃんと色付きで表示されました👌(diff)
zinit snippet OMZL::git.zsh
zinit snippet OMZL::theme-and-appearance.zsh
zinit snippet OMZL::spectrum.zsh
zinit snippet OMZT::robbyrussell
ちなみに:アンインストール方法
ちなみに、zinitは ~/.zinit
にインストールされているので、アンインストールするときは
-
~/.zinit
を削除 -
~/.zshrc
から関連する行を削除
でOKです。(多分)
また、プラグインは ~/.zinit/plugins
にあるので、特定のプラグインだけをアンインストールしたい場合は、この中の当該ディレクトリを削除してあげればOKです。
おまけ:Macの環境構築自動化のためのAnsible Playbookもメンテ
僕はMacの環境構築を Ansibleで自動化している んですが、そのためのAnsible Playbookの内容も今回忘れずに更新しました✋(diff)
参考記事
まとめ
思い腰を上げて oh-my-zsh から zinit に乗り換えてみましたが、やってみたらめっちゃ簡単でした。
個人的に、シェルの設定は凝り始めるとキリがないので「インストールするだけで全体的にいい感じにしてくれる」というのが希望条件なんですが、zinitはサンプルどおりの内容でインストールしただけでまさに全体的にいい感じにしてくれたので最高でした✨
Discussion