Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
373 lines (264 sloc) 16.7 KB

🇺🇸 🇯🇵

Zsh のプラグインマネージャー

Travis Version Slack


メリット

  • 何でも管理できる
  • 高速インストール・高速アップデート
  • 遅延読み込みに対応
  • リビジョンロック(ブランチやタグを固定する機能)
  • post-update 等のフック機能
  • パッケージ間の依存管理
  • antigen とは違って、*.plugin.zsh を必要としない
  • 対話的インターフェイス(fzf, peco, zaw など)
  • キャッシュ機能による読み込み高速化 (起動時間)

DEMO:

インストール

推奨方法

$ curl -sL zplug.sh/installer | zsh

インストーラの実態:

Homebrew から (OS X)

$ brew install zplug

git から

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 に以下を書き込む:

  1. zplug commands でインストールするパッケージについて書く
  2. zplug load によりプラグインを読み込み、コマンドを $PATH に追加するようにする

Example

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

# Disable updates using the "frozen:" tag
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:"(( $+commands[git] ))"
zplug "themes/duellj", from:oh-my-zsh
zplug "lib/clipboard", from:oh-my-zsh, if:"[[ $OSTYPE == *darwin* ]]"

# インストール・アップデート後にコマンドを実行するフック
zplug "tj/n", hook-build:"make install"

# リビジョン(ブランチ名やハッシュなど)による固定が可能
zplug "b4b4r07/enhancd", at:v1
zplug "mollifier/anyframe", at:4c23cb60

# "if" タグが真のとき読み込まれる
zplug "hchbaw/opp.zsh", if:"(( ${ZSH_VERSION%%.*} < 5 ))"

# Gist も同様に管理できる
zplug "b4b4r07/79ee61f7c140c63d2786", \
    from:gist, \
    as:command, \
    use:get_last_pane_path.sh

# Bitbucket に対応
zplug "b4b4r07/hello_bitbucket", \
    from:bitbucket, \
    as:command, \
    hook-build:"chmod 755 *.sh", \
    use:"*.sh"

# 依存管理
# jq コマンドがインストールされているときのみ emoji-cli を読み込む例
zplug "stedolan/jq", \
    from:gh-r, \
    as:command, \
    rename-to:jq
zplug "b4b4r07/emoji-cli", \
    on:"stedolan/jq"
# Note: To specify the order in which packages should be loaded, use the nice
#       tag described in the next section

# 読み込む順序を設定する
# 例: zsh-syntax-highlighting は compinit コマンドの実行後に読み込まれる必要がある
# "nice" は 10 以上で compinit 後に実行するようにできる(-20 <= nice <= 19)
zplug "zsh-users/zsh-syntax-highlighting", nice:10

# ローカルプラグインを管理する
zplug "~/.zsh", from:local

# まだインストールされていないプラグインを一括インストールする
if ! zplug check --verbose; then
    printf "Install? [y/N]: "
    if read -q; then
        echo; zplug install
    fi
fi

# その後プラグインを読み込み、コマンドを PATH に追加する
zplug load --verbose

Finally, use zplug install to install your plugins and reload .zshrc.

1. オプション

オプション 説明
--help ヘルプを表示する
--version バージョン情報を表示する

2. サブコマンド

サブコマンド 説明 そのオプション
install 並列インストール (なし)
load インストール済みプラグインを読み込み、インストール済みコマンドを $PATH に追加する --verbose
list インストール済みパッケージを表示する (端的に連想配列 $zplugs を表示する) --select
update インストール済みパッケージを並列でアップデートする --self,--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 を zplug で管理する

zplug 自身を管理するなら以下を実行する (zplug のインストール後に):

$ zplug update --self

--self オプションを利用すると zplug が $ZPLUG_HOME/repos にインストールされて $ZPLUG_HOME/zplug にリンクされる。

zplug を他のパッケージと同様に管理するには .zshrc に以下を書き込む。

zplug "zplug/zplug"

あとは zplug update を実行するだけ。

3. タグ

truthytrue, yes, on, 1 で、 falsyfalse, no, off, 0 を意味する。

タグ 説明 値 (デフォルト値)
as プラグインとして、またはコマンドとして追加するか指定する plugin,command (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,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
nice プラグインの読み込み順序を指定する。 10 以上を指定すると、compinit コマンドの実行後に読まれることになる (#26 参照) -20 から 19 (0) nice:19
lazy 遅延読み込みするかどうかを指定する truthy または falsy (false) lazy:true
depth リポジトリをクローンするときのヒストリサイズ。0 はすべてのヒストリをクローンする 0 と正の整数 (ZPLUG_CLONE_DEPTH) 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 の使い方については後述を参照。

4. 環境変数

ZPLUG_HOME

デフォルトでは ~/.zplugzplug はこのディレクトリ以下に配置される。ディレクトリ構成は以下である。

$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_HOME/bin に作成する (違う名前で作成したい場合、rename-to: タグを使う)。$ZPLUG_HOME/bin$PATH に追加されるので、インストールしたコマンドはいつでもどこからでも実行可能になる。

ZPLUG_THREADS

インストール・アップデート時に立ち上がるプロセス数の制限値。デフォルトは 16.

ZPLUG_PROTOCOL

デフォルトは HTTPS。取りうる値は HTTPSSSHのみ。特別な理由がない限り、 HTTPS を推奨する。

詳細やその理由については Which remote URL should I use? - GitHub Help を参照のこと。

ZPLUG_CLONE_DEPTH

デフォルトは 0。When cloning a Git repository, there is an option to limit the amount of history your clone will have. This environment variable how many commits you want to clone. The value 0 means that zplug will clone the whole history of packages.

ZPLUG_FILTER

デフォルトは fzf-tmux:fzf:peco:percol:zaw--select オプションを指定すると、$PATH にあるコロンで区切られた最初の要素(この例では fzf-tmux)が zplug で使われる対話フィルタとして使用される。ZPLUG_FILTER は次のようにスペースや、ダブルクォーテーションを使用することができる: fzf-tmux -d "10%":/path/to/peco:my peco

ZPLUG_LOADFILE

デフォルトは $ZPLUG_HOME/packages.zsh。このファイルはコマンドライン上からパッケージの追加を行うときに使用される。これを利用することで .zshrc から分離してパッケージリストを管理することができる。

ZPLUG_USE_CACHE

デフォルトは true。true の場合、zplug はロードの高速化のためにキャッシュを利用するようになる。キャッシュファイルは $ZPLUG_CACHE_FILE も保存されている。キャッシュをクリアする場合は、zplug clear を実行するか以下のようにすると良い:

$ ZPLUG_USE_CACHE=false zplug load

ZPLUG_CACHE_FILE

デフォルトは $ZPLUG_HOME/.cache。キャッシュの保存先を変更することができる。例えば $HOME/.cache/zplug/cache とか。

ZPLUG_REPOS

デフォルトは $ZPLUG_HOME/repos。パッケージのクローン先かつ保存先の場所を設定することができる。

外部コマンド

zplug では git(1) のように外部コマンド機能が利用できる。 $PATH のいずれかにある zplug-cmdname の規則を持つ実行ファイルは、まるでサブコマンドのように zplug cmdname の形で利用することができる。 これにより自由に自分で zplug のコマンドを追加したり拡張することができる。 作成方法や利用ガイドラインの詳細については docs ディレクトリ以下にあるので参照とのこと。実際の外部コマンドのサンプルには zplug-env を参照すると良い。

V.S.

zplug は他の有名な zsh プラグインマネージャーよりも速い:

メモ

  • antigen 💉 はもうおしまい。これからは zplug 🌺 を使おう
  • 🌺 zplug は vim-plugneobundle.vim を参考に設計された

その他

zplug などから利用できる zsh プラグインは awesome-zsh-plugins にあるので参考になる。

antigen や zgen、もしくは zplug v1 から移行するための情報は zplug の公式 wiki にある。

ライセンス

MIT (c) @b4b4r07

You can’t perform that action at this time.