🍎

[Mac] oh-my-zshからzinitに乗り換えたらいい感じになった

2020/11/18に公開

はじめに

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-autosuggestionsZSH_AUTOSUGGEST_HIGHLIGHT_STYLE という 環境変数によって決定しています

.zshrc の中で

ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#ff00ff,bg=cyan,bold,underline"

のように定義してあげれば自由に表現を変更できます。( zsh-256color との併用が前提です)

デフォルトではシンプルな灰色になります。

oh-my-zshプラグインをいくつかインストール

以下のoh-my-zshプラグインは以前から気に入って使っていたので、これは追加で入れておきます。(diff

ちなみに、便利プラグイン探しには awesome-zsh-plugins が大変便利です。

補完をcase-insensitiveに

oh-my-zshは .zshrcCASE_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+WOption+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.zshOMZL::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はサンプルどおりの内容でインストールしただけでまさに全体的にいい感じにしてくれたので最高でした✨

GitHubで編集を提案

Discussion