LoginSignup
109
97

More than 3 years have passed since last update.

zinitでzsh環境をいい感じにしたメモ

Last updated at Posted at 2020-05-01

はじめに

プログラミングで使っているPC(プログラミングに使わないPCは持ってないけど)のシェルはここ3年くらいは zsh を使っていて、zshの機能を拡張するためのプラグインマネージャには Prezto を利用していました。

↓過去にPreztoでzsh環境を作ったときの記事
Macのzshでプロンプトをカスタマイズしたり、コマンド履歴を検索したりできるようにする

今回、仕事で使うPCが新しくなったので、今どきのプラグインマネージャはどれが良いんだろう?と調べてみたところ、 zinit(旧名 zplugin)が良さそうだったのでこれを使ってシェル環境を作ってみました。
結果としては以前に Prezto で設定していたシェル環境よりも快適になったと思います。

なお、数多あるzshプラグインマネージャの情報は awesome-zsh-plugins がまとまっていて参考になりました。

zinitのいいところ

  • 起動が速い。
  • 従来のプラグインマネージャ oh-my-zshPrezto の豊富なプラグイン資産を使える。

セットアップ後に使える機能

後述の手順で zinit をセットアップし終えると、以下の機能が使えるようになります。

これら以外にも多彩なプラグインで機能追加することが可能です。

機能 説明 起動方法
プロンプトのカスタマイズ プロンプトにGitのステータスやブランチ、日時などを表示。 -
コマンド・オプション入力補完 入力中のコマンドやそのオプションを補完。 TAB
ハイライト コマンドやオプションを色分けして表示。 -
コマンド履歴検索 以前に実行したコマンド履歴をインクリメンタルサーチで呼び出す。 Ctrl+r
GitHubを開く コマンドでGitHub Webサイトを開く。 ghg
インタラクティブなjq jq によるJSONサーチをインクリメンタルに。 Alt+j
高機能なls Gitステータスが色分けされて見れる ls。 k
AWS CLI v2入力補完 AWS CLI v2のサブコマンド・オプションを補完。 TAB
pecoでcd履歴検索 以前に cd で移動したディレクトリの履歴を、 peco で検索して呼び出す。 Ctrl+x -> b ※注
pecoでコマンド履歴検索 以前に実行したコマンド履歴を、 peco で検索して呼び出す。 Ctrl+x -> r ※注
pecoでGitブランチ検索 Gitブランチを peco で検索して切り替える。 Ctrl+x -> Ctrl+b ※注
pecoでGit作業コピーを検索 ghq でクローンしたGit作業コピーを、 peco で検索して移動する。 Ctrl+x -> g ※注
  • 注)自分は普段 Emacs を使っているので Emacs風のキーバインドにしていますが、任意のキーバインドを割り当て可能です。

手順

zshのインストール

今の OS X(Mac前提です...mm)はデフォルトのシェルが zsh になってるので問題ないですね(笑)

zinitのインストール

公式のインストールガイド に従ってインストールします。

$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/zdharma/zinit/master/doc/install.sh)"

~/.zshrczinit の設定が追記されるのでリロードし、 zinit 自身を最新化します。

$ source ~/.zshrc
$ zinit self-update

これでインストール自体は完了です。

zinitのカスタマイズ

続いて ~/.zshrczinit の機能を使ってカスタマイズしていきます。

前述の手順で ~/.zshrc に↓のような設定が追加されているので、それより下に追記していきます。
必要に応じて 公式の.zshrcサンプル を見たり、 zinit やら snippet やら light やらの詳細は zinitの解説 を参照してください。

~/.zshrc
### Added by Zinit's installer
  :
  略
  :
### End of Zinit's installer chunk

これ以降に設定を追記していく

~/.zshrc を編集・保存してリロードすると、自動的に必要なリソースがダウンロードされてセットアップされます。

Preztoのセットアップ

以前に Prezto を使っていて慣れているのもあるので、今回も zinit から Prezto を使えるようにします。

~/.zshrc
# Preztoのセットアップ
zinit snippet PZT::modules/helper/init.zsh

oh-my-zshのセットアップと、プロンプトのカスタマイズ

oh-my-zsh は使ってなかったのですが、 zinit のプロンプトのカスタマイズは oh-my-zshのテーマを使う ようなので、こっちも設定します。

~/.zshrc
# oh-my-zshのセットアップ
zinit snippet OMZL::git.zsh
zinit snippet OMZP::git # <- なんかおまじないらしい
zinit cdclear -q

# プロンプトのカスタマイズ
setopt promptsubst
zinit snippet OMZT::gnzh
zinit light agnoster/agnoster-zsh-theme # <- ここで好きなテーマのGitHubリポジトリを Group/Repository で指定。

プラグインのセットアップ

プラグインは基本的に zinit light [プラグインのGitHubリポジトリの Group/Repository] と書くだけで使えます。便利ー

一般的なプラグイン

ぜったいに使うようなプラグインをセットアップします。

~/.zshrc
# 補完
zinit light zsh-users/zsh-autosuggestions

# シンタックスハイライト
zinit light zdharma/fast-syntax-highlighting

# Ctrl+r でコマンド履歴を検索
zinit light zdharma/history-search-multi-word

お好みのプラグイン

あとは前出の awesome-zsh-plugins あたりから使いたいプラグインを探してセットアップしていきます。

~/.zshrc
# クローンしたGit作業ディレクトリで、コマンド `git open` を実行するとブラウザでGitHubが開く
zinit light paulirish/git-open

# iTerm2を使っている場合に、コマンド `tt タブ名` でタブ名を変更できる
zinit light gimbo/iterm2-tabs.zsh

# jq をインタラクティブに使える。JSONを標準出力に出すコマンドを入力した状態で `Alt+j` すると jq のクエリが書ける。
# 要 jq
zinit light reegnz/jq-zsh-plugin

# Gitの変更状態がわかる ls。ls の代わりにコマンド `k` を実行するだけ。
zinit light supercrabtree/k

# AWS CLI v2の補完。
# 要 AWS CLI v2
# この順序で記述しないと `complete:13: command not found: compdef` のようなエラーになるので注意
autoload bashcompinit && bashcompinit
source ~/.zinit/plugins/drgr33n---oh-my-zsh_aws2-plugin/aws2_zsh_completer.sh
complete -C '/usr/local/bin/aws_completer' aws
zinit light drgr33n/oh-my-zsh_aws2-plugin

anyframeのセットアップ

自分の場合はこれに加えて peco を便利に使えるようにしてくれる anyframe も使います。

~/.zshrc
# anyframeのセットアップ
zinit light mollifier/anyframe

# Ctrl+x -> b
# peco でディレクトリの移動履歴を表示
bindkey '^xb' anyframe-widget-cdr
autoload -Uz chpwd_recent_dirs cdr add-zsh-hook
add-zsh-hook chpwd chpwd_recent_dirs

# Ctrl+x -> r
# peco でコマンドの実行履歴を表示
bindkey '^xr' anyframe-widget-execute-history

# Ctrl+x -> Ctrl+b
# peco でGitブランチを表示して切替え
bindkey '^x^b' anyframe-widget-checkout-git-branch

# Ctrl+x -> g
# GHQでクローンしたGitリポジトリを表示
bindkey '^xg' anyframe-widget-cd-ghq-repository

その他

あとはお好みで、いつもどおり環境変数をセットしたり、エイリアスを切ったりしていくだけです。

完全な例

~/.zshrc

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

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

# Load a few important annexes, without Turbo
# (this is currently required for annexes)
zinit light-mode for \
    zinit-zsh/z-a-patch-dl \
    zinit-zsh/z-a-as-monitor \
    zinit-zsh/z-a-bin-gem-node

### End of Zinit's installer chunk

zinit snippet PZT::modules/helper/init.zsh

zinit snippet OMZL::git.zsh
zinit snippet OMZP::git
zinit cdclear -q
setopt promptsubst
zinit snippet OMZT::gnzh
zinit light agnoster/agnoster-zsh-theme


zinit light zsh-users/zsh-autosuggestions
zinit light zdharma/fast-syntax-highlighting
zinit light zdharma/history-search-multi-word

zinit light paulirish/git-open
zinit light gimbo/iterm2-tabs.zsh
zinit light reegnz/jq-zsh-plugin
zinit light supercrabtree/k

autoload bashcompinit && bashcompinit
source ~/.zinit/plugins/drgr33n---oh-my-zsh_aws2-plugin/aws2_zsh_completer.sh
complete -C '/usr/local/bin/aws_completer' aws
zinit light drgr33n/oh-my-zsh_aws2-plugin


zinit light mollifier/anyframe

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

bindkey '^xr' anyframe-widget-execute-history
bindkey '^x^b' anyframe-widget-checkout-git-branch
bindkey '^xg' anyframe-widget-cd-ghq-repository

おわり

まだまだ zinit を使いこなせてませんが、ひとまず最低限のことはできるようになりました。

以上です。

109
97
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
109
97