🔩

Zinitでターミナルをカスタマイズする

2022/04/24に公開

Zinitとは

zinitとは、zshのプラグインマネージャーです。

Zinitのいいところ

めっちゃ速い

Zshの起動が50〜80%速くなるみたいです。
他の有名なプラグインマネージャーとの速度比較した図がこちら

zinit#zinit

機能が豊富

Oh-My-ZshやPreztoに対応しており、フレームワークに依存していません。
プラグイン、ライブラリ、テーマを楽に制作することができます。

他にもいろんなメリットがあると思うので、気になる方はGithubをご覧ください。

Zinitのインストール

こちらのコマンドを実行します。

$ sh -c "$(curl -fsSL https://git.io/zinit-install)"
$ source ~/.zshrc
$ zinit self-update

すると~/.local/share/zinit/zinit.gitにZinitがインストールされて、~/.zshrcに下のようなコードが追加されます。下の3行はzinitコマンドを補完する設定です。

.zshrc
### Added by Zinit's installer
if [[ ! -f $HOME/.local/share/zinit/zinit.git/zinit.zsh ]]; then
    print -P "%F{33} %F{220}Installing %F{33}ZDHARMA-CONTINUUM%F{220} Initiative Plugin Manager (%F{33}zdharma-continuum/zinit%F{220})…%f"
    command mkdir -p "$HOME/.local/share/zinit" && command chmod g-rwX "$HOME/.local/share/zinit"
    command git clone https://github.com/zdharma-continuum/zinit "$HOME/.local/share/zinit/zinit.git" && \
        print -P "%F{33} %F{34}Installation successful.%f%b" || \
        print -P "%F{160} The clone has failed.%f%b"
fi

source "$HOME/.local/share/zinit/zinit.git/zinit.zsh"
autoload -Uz _zinit
(( ${+_comps} )) && _comps[zinit]=_zinit
### End of Zinit's installer chunk

使い方

Zinitはloadlightを使ってプラグインを読み込むことができます。

zinit load <repo/plugin>
zinit light <repo/plugin>
  • loadはレポート(トラッキング)を有効にします。zinit reportで一覧表示したり、zinit unloadでプラグインを無効化することができます。
  • lightはレポート(トラッキング)を無効にします。

また以下のようにsnippetを使って読み込むこともできます。

zinit snippet https://gist.githubusercontent.com/hightemp/5071909/raw/

基本的なカスタマイズ

ここからは自分好みにカスタマイズしていきます。

プロンプトテーマの変更

デフォルトのプロンプトだと見づらいので、人気のあるpureを入れておきましょう。

.zshrc
# Load the pure theme, with zsh-async library that's bundled with it.
zinit ice pick"async.zsh" src"pure.zsh"
zinit light sindresorhus/pure


pure

個人的にpureの配色が好きじゃなかったのでIcebergというカラースキーマを使っています。(icebergをちょっとだけカスタマイズして使っています)

設定の仕方は、こちらの記事を参考に。
Mac のターミナルに Iceberg を設定して見やすくする

シンタックスハイライト

.zshrc
zinit light zsh-users/zsh-syntax-highlighting

入力補完①

.zshrc
zinit light zsh-users/zsh-autosuggestions

ターミナルのコマンド履歴に基づいてコマンド候補を表示、入力補完してくれます。
薄ーくコマンドの候補表示されています。

入力補完②

.zshrc
zinit light zsh-users/zsh-completions

コマンドやファイル名の入力中に「Tabキー」を押すことで、入力候補一覧を表示してくれます。

コマンド履歴を検索

.zshrc
zinit light zdharma/history-search-multi-word

historyコマンドと似てますが、こちらは選択肢から選べたりするのでより便利です。
「Ctrl+R」で一覧が表示されます。

ここまでの.zshrc

とりあえずここまで全部やったら、以下のような.zshrcができていると思います。(僕の個人的な設定も含まれてます。)

.zshrc
# ----------------------------
# basic
# ----------------------------
# コマンド履歴の管理
HISTFILE=~/.zsh_history
export HISTSIZE=1000
export SAVEHIST=10000

# ----------------------------
# Added by Zinit's installer
# ----------------------------
if [[ ! -f $HOME/.local/share/zinit/zinit.git/zinit.zsh ]]; then
    print -P "%F{33} %F{220}Installing %F{33}ZDHARMA-CONTINUUM%F{220} Initiative Plugin Manager (%F{33}zdharma-continuum/zinit%F{220})…%f"
    command mkdir -p "$HOME/.local/share/zinit" && command chmod g-rwX "$HOME/.local/share/zinit"
    command git clone https://github.com/zdharma-continuum/zinit "$HOME/.local/share/zinit/zinit.git" && \
        print -P "%F{33} %F{34}Installation successful.%f%b" || \
        print -P "%F{160} The clone has failed.%f%b"
fi

source "$HOME/.local/share/zinit/zinit.git/zinit.zsh"
autoload -Uz _zinit
(( ${+_comps} )) && _comps[zinit]=_zinit

# ----------------------------
# Zinit plugins
# ----------------------------
# Load the pure theme, with zsh-async library that's bundled with it.
zinit ice pick"async.zsh" src"pure.zsh"
zinit light sindresorhus/pure
# シンタックスハイライト
zinit light zsh-users/zsh-syntax-highlighting
# 入力補完
zinit light zsh-users/zsh-autosuggestions
zinit light zsh-users/zsh-completions
# コマンド履歴を検索
zinit light zdharma/history-search-multi-word

# ----------------------------
# alias
# ----------------------------
alias g="git"
alias gb="git branch"
alias gs="git switch"
alias gco="git checkout"
alias r="bin/rails"
alias rs="bin/rails server"
alias rc="bin/rails console"
alias rg="bin/rails generate"
alias rdbc="bin/rails db:create"
alias rdbm="bin/rails db:migrate"

もっとカスタマイズしたい

ここからは随時更新する予定です。

peco

色々調べてみるとpecoというものを発見しました。
こいつを入れてあげると、

  • ディレクトリの移動履歴を表示、移動
  • コマンドの実行履歴を表示、実行
  • Gitブランチを表示、切替え

といったことが可能になるみたいです。
毎回cdコマンドでディレクトリ移動することとは、おさらばできそうです。

pecoの導入

Githubにしたがって、brewでインストールします。

$ brew install peco

次にpecoをより便利に扱えるanyframeをzinit経由で読み込みます。

.zshrc
zinit light mollifier/anyframe

これでセットアップは完了です。

pecoのカスタマイズ

ショートカットキーは自分の使いやすいコマンドに変更可能です。
詳しくはanyframeを参照ください。

ディレクトリの移動履歴を表示

.zshrc
bindkey '^xb' anyframe-widget-cdr
autoload -Uz chpwd_recent_dirs cdr add-zsh-hook
add-zsh-hook chpwd chpwd_recent_dirs

「Ctrl+x -> b」でディレクトリの移動履歴を表示してくれます。
選択するとそこへ移動してくれます。

コマンドの実行履歴を表示

.zshrc
bindkey '^xr' anyframe-widget-execute-history

「Ctrl+x -> r」でコマンドの実行履歴を表示してくれます。
history-search-multi-wordの強化版ですね。

Gitブランチを表示して切替え

.zshrc
bindkey '^x^b' anyframe-widget-checkout-git-branch

「Ctrl+x -> Ctrl+b」でGitブランチを表示して切替えができます。

Discussion