🇺🇸 🇯🇵
Zsh のプラグインマネージャー
- 何でも管理できる
- GitHub や Bitbucket にあるプラグインや UNIX コマンド
- Gist ファイル (gist.github.com)
- 外部フレームワークなどのプラグイン (例: oh-my-zsh や prezto のプラグイン・テーマ)
- GitHub Releases のバイナリファイル
- ローカルプラグイン
- その他 (カスタムソースによって追加できる)
- 高速インストール・高速アップデート
- 遅延読み込みに対応
- リビジョンロック(ブランチやタグを固定する機能)
post-update
等のフック機能- パッケージ間の依存管理
- antigen とは違って、
*.plugin.zsh
を必要としない - 対話的インターフェイス(fzf, peco, zaw など)
- キャッシュ機能による読み込み高速化 (起動時間)
DEMO:
最新版 | 安定版 |
---|---|
$ curl -sL --proto-redir -all,https https://raw.githubusercontent.com/zplug/installer/master/installer.zsh| zsh
インストーラの実態:
Homebrew から (OS X)
$ brew install zplug
GitHub からクローンしてきて init.zsh
を読み込む:
$ export ZPLUG_HOME=/path/to/.zplug
$ git clone https://github.com/zplug/zplug $ZPLUG_HOME
zsh
: バージョン 4.3.9 以上git
: バージョン 1.7 以上awk
:mawk
以外の AWK 処理系
.zshrc
に以下を書き込む:
zplug
commands でインストールするパッケージについて書くzplug load
によりプラグインを読み込み、コマンドを$PATH
に追加するようにする
source ~/.zplug/init.zsh
# ダブルクォーテーションで囲うと良い
zplug "zsh-users/zsh-history-substring-search"
# コマンドも管理する
# グロブを受け付ける(ブレースやワイルドカードなど)
zplug "Jxck/dotfiles", as:command, use:"bin/{histuniq,color}"
# こんな使い方もある(他人の zshrc)
zplug "tcnksm/docker-alias", use:zshrc
# frozen タグが設定されているとアップデートされない
zplug "k4rthik/git-cal", as:command, frozen:1
# GitHub Releases からインストールする
# また、コマンドは rename-to でリネームできる
zplug "junegunn/fzf-bin", \
from:gh-r, \
as:command, \
rename-to:fzf, \
use:"*darwin*amd64*"
# oh-my-zsh をサービスと見なして、
# そこからインストールする
zplug "plugins/git", from:oh-my-zsh
# if タグが true のときのみインストールされる
zplug "lib/clipboard", from:oh-my-zsh, if:"[[ $OSTYPE == *darwin* ]]"
# prezto のプラグインやテーマを使用する
zplug "modules/osx", from:prezto, if:"[[ $OSTYPE == *darwin* ]]"
zplug "modules/prompt", from:prezto
# zstyle は zplug load の前に設定する
zstyle ':prezto:module:prompt' theme 'sorin'
# インストール・アップデート後に実行されるフック
# この場合は以下のような設定が別途必要
# ZPLUG_SUDO_PASSWORD="********"
zplug "jhawthorn/fzy", \
as:command, \
rename-to:fzy, \
hook-build:"make && sudo make install"
# リビジョンロック機能を持つ
zplug "b4b4r07/enhancd", at:v1
zplug "mollifier/anyframe", at:4c23cb60
# Gist ファイルもインストールできる
zplug "b4b4r07/79ee61f7c140c63d2786", \
from:gist, \
as:command, \
use:get_last_pane_path.sh
# bitbucket も
zplug "b4b4r07/hello_bitbucket", \
from:bitbucket, \
as:command, \
use:"*.sh"
# `use` タグでキャプチャした文字列でリネームする
zplug "b4b4r07/httpstat", \
as:command, \
use:'(*).sh', \
rename-to:'$1'
# 依存管理
# "emoji-cli" は "jq" があるときにのみ読み込まれる
zplug "stedolan/jq", \
from:gh-r, \
as:command, \
rename-to:jq
zplug "b4b4r07/emoji-cli", \
on:"stedolan/jq"
# ノート: 読み込み順序を遅らせるなら defer タグを使いましょう
# 読み込み順序を設定する
# 例: "zsh-syntax-highlighting" は compinit の後に読み込まれる必要がある
# (2 以上は compinit 後に読み込まれるようになる)
zplug "zsh-users/zsh-syntax-highlighting", defer:2
# ローカルプラグインも読み込める
zplug "~/.zsh", from:local
# テーマファイルを読み込む
zplug 'dracula/zsh', as:theme
# 未インストール項目をインストールする
if ! zplug check --verbose; then
printf "Install? [y/N]: "
if read -q; then
echo; zplug install
fi
fi
# コマンドをリンクして、PATH に追加し、プラグインは読み込む
zplug load --verbose
最後に、 zplug install
でプラグインをインストールし、.zshrc
をリロードする
オプション | 説明 |
---|---|
--help |
ヘルプを表示する |
--rollback |
インストールに失敗したパッケージをロールバックする |
--self-manage |
zplug自身をzplugで管理する |
--version |
バージョン情報を表示する |
--log |
ログを見る(開発者向け) |
サブコマンド | 説明 | そのオプション |
---|---|---|
install |
並列インストール | (なし) |
load |
インストール済みプラグインを読み込み、インストール済みコマンドを $PATH に追加する |
--verbose |
list |
インストール済みパッケージを表示する (端的に連想配列 $zplugs を表示する) |
--select ,--installed ,--loaded |
update |
インストール済みパッケージを並列でアップデートする | --select ,--force |
check |
未インストールなパッケージがないなら真を返し、そうでなければ偽を返す | --verbose |
status |
パッケージが最新かどうか確認する | --select |
clean |
管理されていないパッケージを削除する | --force ,--select |
clear |
キャッシュを削除する | (なし) |
info |
パッケージのタグ情報などを個別に表示する | (なし) |
# zplug check はインストールするものがないときに真を返す
# ゆえにそうでないとき zplug install する
if ! zplug check; then
zplug install
fi
# プラグインを読み込み、コマンドを実行可能にする
zplug load
# zplug check は引数に与えられたリポジトリがインストールされているなら真を返す
if zplug check b4b4r07/enhancd; then
# enhancd がインストールされている場合のみ設定する
export ENHANCD_FILTER=fzf-tmux
fi
他のパッケージと同様に zplug を管理するには .zshrc
に以下を書き込む。
zplug 'zplug/zplug', hook-build:'zplug --self-manage'
あとは zplug update
を実行するだけ。
truthy
は true
, yes
, on
, 1
で、 falsy
は false
, no
, off
, 0
を意味する。
タグ | 説明 | 値 (デフォルト値) | 例 |
---|---|---|---|
as |
プラグインとして、またはコマンドとして追加するか指定する | plugin ,command ,theme (plugin ) |
as:command |
use |
読み込むファイルパターンを指定する (plugin のとき) か $PATH に追加したいコマンドの相対パスを指定する (command のとき) / from:gh-r の場合は zplug が自動で OS のアーキテクチャを判別するが、意図しない結果の場合 use:"*darwin*{amd,386}*" のようにすると良い |
グロブ・パターン (use:"*.zsh" ) |
use:bin ,use:"*.sh" , use:*darwin* |
ignore |
use タグと似ているが無視したいファイルパターンを指定する (#56 参照) |
グロブ・パターン (-) | ignore:"some_*.zsh" |
from |
どこからインストールするか指定する | github ,bitbucket ,gh-r ,gist ,oh-my-zsh ,prezto ,local (github ) |
from:gh-r |
at |
branch/tag/commit を指定して固定する | リビジョン (master ) |
at:v1.5.6 |
rename-to |
リンクするときに変更したいファイル名を指定する (as:command のときのみ有効) |
ファイル名 (-) | rename-to:fzf |
dir |
パッケージのインストール先 | READ ONLY | dir:/path/to/user/repo |
if |
パッケージをインストールするときの条件を指定する | 真偽値 (-) | if:"[ -d ~/.zsh ]" |
hook-build |
インストール・アップデート後に実行するコマンド | コマンド (-) | hook-build:"make install" |
hook-load |
ロード後に実行するコマンド | コマンド (-) | hook-load:"echo 'Loaded!'" |
frozen |
明示的に指定するとアップデート対象から省く | truthy または falsy (false) | frozen:1 |
on |
指定されたパッケージがインストールされているときのみロードする | package | on:user/repo |
defer |
プラグインの読み込みを遅らせる。 2 以上を指定すると、compinit コマンドの実行後に読まれることになる (#26 参照) |
0 から 3 (0) | defer:2 |
lazy |
遅延読み込みするかどうかを指定する | truthy または falsy (false) | lazy:true |
depth |
リポジトリをクローンするときのヒストリサイズ。0 はすべてのヒストリをクローンする | 0 と正の整数 | depth:10 |
zstyle
によってデフォルト値を変更できる。フォーマットは次のように:
zstyle ":zplug:tag" tag_name new_default_value
例えば、もしプラグインよりコマンドを利用することが多いなら (具体的に言うとas:command
とするほうが多い場合) こう書くことができる:
zstyle ":zplug:tag" as command
こうすることでデフォルト値を変更することができる。as
タグ以外のタグも同様に。
コマンドライン上から zplug パッケージを追加できる。もしコマンドライン上から追加することがあるのなら、zsh 補完を利用してより簡単でパワフルに追加できる。
この場合、.zshrc
でなく $ZPLUG_LOADFILE
に設定が記述される。また、新しく zsh を立ち上げるときに、zplug load
の際にこのファイルもロードする。
ZPLUG_LOADFILE
の使い方については後述を参照。
デフォルトでは ~/.zplug
。zplug
はこのディレクトリ以下に配置される。ディレクトリ構成は以下である。
$ZPLUG_HOME
|-- bin
| `-- some_command -> ../repos/username_A/reponame1/some_command
`-- repos
|-- username_A
| |-- reponame1
| | |-- README.md
| | `-- some_command
| `-- reponame2
| |-- README.md
| `-- some_plugin.zsh
`-- username_B
`-- reponame1
as:command
を指定したとき、zplug はパッケージをコマンドとみなし、同名のシンボリックリンクを $ZPLUG_BIN
に作成する (違う名前で作成したい場合、rename-to:
タグを使う)。$ZPLUG_BIN
は $PATH
に追加されるので、インストールしたコマンドはいつでもどこからでも実行可能になる。
インストール・アップデート時に立ち上がるプロセス数の制限値。デフォルトは 16.
デフォルトは HTTPS。取りうる値は HTTPS
と SSH
のみ。特別な理由がない限り、 HTTPS
を推奨する。
詳細やその理由については Which remote URL should I use? - GitHub Help を参照のこと。
デフォルトは fzf-tmux:fzf:peco:percol:zaw
。--select
オプションを指定すると、$PATH
にあるコロンで区切られた最初の要素(この例では fzf-tmux)が zplug で使われる対話フィルタとして使用される。ZPLUG_FILTER
は次のようにスペースや、ダブルクォーテーションを使用することができる: fzf-tmux -d "10%":/path/to/peco:my peco
デフォルトは $ZPLUG_HOME/packages.zsh
。このファイルはコマンドライン上からパッケージの追加を行うときに使用される。これを利用することで .zshrc
から分離してパッケージリストを管理することができる。
デフォルトは true
。true の場合、zplug はロードの高速化のためにキャッシュを利用するようになる。キャッシュファイルは $ZPLUG_CACHE_DIR
に保存されている。キャッシュをクリアする場合は、zplug clear
を実行するか以下のようにすると良い:
$ ZPLUG_USE_CACHE=false zplug load
デフォルトは $ZPLUG_HOME/.cache
。キャッシュの保存先を変更することができる。例えば ~/.cache/zplug
とか。
デフォルトは $ZPLUG_HOME/repos
。パッケージのクローン先かつ保存先の場所を設定することができる。
設定しておくと hook-build
などのときに sudo コマンドが使えるようになる。しかし、セキュアな変数なので取扱に注意すること。
# dotfiles で管理していないファイルに切り出すなどする
source ~/.zshrc_secret
zplug "some/command", hook-build:"make && sudo make install"
デフォルトは $ZPLUG_HOME/bin
。コマンドのシンボリックリンクの保存先を変更することができる。例えば ~/bin
とか。
zplug では git(1)
のように外部コマンド機能が利用できる。
$PATH
のいずれかにある zplug-cmdname
の規則を持つ実行ファイルは、まるでサブコマンドのように zplug cmdname
の形で利用することができる。
これにより自由に自分で zplug のコマンドを追加したり拡張することができる。
作成方法や利用ガイドラインの詳細については docs ディレクトリ以下にあるので参照のこと。実際の外部コマンドのサンプルには zplug-env
を参照すると良い。
zplug は他の有名な zsh プラグインマネージャーよりも速い:
- antigen 💉 はもうおしまい。これからは zplug 🌺 を使おう
- 🌺 zplug は vim-plug や neobundle.vim を参考に設計された
zplug などから利用できる zsh プラグインは awesome-zsh-plugins にあるので参考になる。
antigen や zgen、もしくは zplug v1 から移行するための情報は zplug の公式 wiki にある。