もっと便利になれる zsh プラグインによる CLI ライフ


最近、zsh + Vim + tmux でコマンドラインライフを過ごしている方も多くなってきたように思う。その豊かな CLI ライフを支えているのは数多くの優れたプラグインであることには間違いない(もちろんプラグインを使わない派閥も一定数いるでしょう)。

今回はとりわけ zsh に絞って有用であるプラグインを紹介していく。

zsh のプラグイン

プラグインマネージャ

まずは管理の要となるプラグインマネージャだろう。

今イチオシなのは zplug(neobundle + vim-plug の zsh 版)なのだが定番である Antigen も一応挙げておく。

  • zplug - A next-generation plugin manager for zsh
  • Antigen - A plugin manager for zsh, inspired by oh-my-zsh and vundle.
  • zgen - A lightweight plugin manager for ZSH inspired by Antigen.

プラグイン

  • anyframe

    peco/fzf/percol/zaw などのラッパー関数を提供するフレームワーク的なもの。Vim でいう Unite.vim にあたるような存在。peco でインタラクティブに選択したいけど、シェルスクリプト書けないので設定面倒って人には良いかもしれない。Unite でいう source のように簡単に拡張できる機構がある。

    zplug "mollifier/anyframe"
    antigen bundle mollifier/anyframe
    zgen load mollifier/anyframe
    

    zshでpecoと連携するためのanyframeというプラグインを作った

  • cd-gitroot

    簡単に git ルートへ cd するやつ。

    zplug "mollifier/cd-gitroot"
    antigen bundle mollifier/cd-gitroot
    zgen load mollifier/cd-gitroot
    
  • emoji-cli

    CLI で使える絵文字補完。実行デモを見るとわかりやすい。

    jq に依存するが zplug を使うと一緒にインストールできる。

    コマンドラインで emoji を扱う

    zplug "stedolan/jq", from:gh-r, as:command \
        | zplug "b4b4r07/emoji-cli", if:"which jq"
    
    # antigen/zgen では別途 jq をインストールする必要あり
    antigen bundle b4b4r07/emoji-cli
    zgen load b4b4r07/emoji-cli
    
  • enhancd

    移動系強化プラグイン(z や autojump など)の一つ。これもデモを見たほうが早い。

    fzf/peco/percol なんかから利用できるようになっているのでインタラクティブ性が高く、あいまい検索(最小編集距離を計算)ができるので選択的インターフェースと親和性を高め合い相乗効果がある。

    ターミナルのディレクトリ移動を高速化する

    zplug "b4b4r07/enhancd", of:enhancd.sh
    antigen bundle b4b4r07/enhancd zsh
    zgen load b4b4r07/enhancd zsh
    
  • opp.zsh

    zsh で Vim の操作体系(surround.vim っぽいやつ)を使えるようにするやつ。最新の zsh では限りなく近い機能が標準搭載されたが、5.0.8 以前の zsh では有用である。

    zshでvimのsurround.vim(もどき)をしたい

    # zplug では zsh のバージョン指定ができる
    zplug "hchbaw/opp.zsh", do:"__zsh_version 5.0.8"
    
    antigen bundle hchbaw/opp.zsh
    zgen load hchbaw/opp.zsh
    
  • zsh-history-substring-search

    zsh のヒストリサーチを便利にするやつ。一時期 peco との組み合わせで話題になったが、ヒストリサーチに限ってはこっち使うほうが手っ取り早くて良い。ただ、過去の一覧を見たい、とかには不向き。両方使うのがいい。

    zplug "zsh-users/zsh-history-substring-search", do:"__zsh_version 4.3"
    antigen bundle zsh-users/zsh-history-substring-search
    zgen load zsh-users/zsh-history-substring-search
    
  • zsh-syntax-highlighting

    zsh のコマンドラインに色付けをするやつ。ls とかに色がつくのでいい感じにカラフルな CLI を実現できる。実はこのプラグインは大変有用だが、公式の README にもある通り、compinit 以降に読み込まなければならない。この指定ができるのは現在 zplug のみである。

    # compinit 以降に読み込むようにロードの優先度を変更する
    zplug "zsh-users/zsh-syntax-highlighting", defer:2
    
    antigen bundle zsh-users/zsh-syntax-highlighting
    zgen load zsh-users/zsh-syntax-highlighting
    
  • zsh-users/zsh-completions

    補完ファイルである。zsh ではデフォルトで載っていないが日常的に使うコマンド(vagrant, docker, jq など)の補完ファイルを提供しているので欠かせないプラグインになる。

    zplug "zsh-users/zsh-completions"
    antigen bundle zsh-users/zsh-completions
    zgen load zsh-users/zsh-completions
    

コマンド

ここからは番外編で、有用なコマンドを紹介していく。CLI のカスタマイズと一口に言っても、プラグインによるものであったり、コマンドであったり補完ファイル/テーマファイル、様々である。ここからは Antigen, zgen の管理範囲外であるが、zplug は対応している。

  • emojify

    コマンドライン上の文字リテラルの絵文字を emoji 化するフィルタコマンド。

    zplug "mrowa44/emojify", as:command
    
  • fzf

    言わずと知れたインタラクティブフィルタのひとつ。Mac 系は brew でもインストールできる。

    # fzf-bin にホスティングされているので注意
    # またファイル名が fzf-bin となっているので file:fzf としてリネームする
    zplug "junegunn/fzf-bin", as:command, from:gh-r, file:fzf
    
    # ついでに tmux 用の拡張も入れるといい
    zplug "junegunn/fzf", as:command, of:bin/fzf-tmux
    
  • peco

    fzf といえば peco、peco といえば fzf。fzf-tmux の peco 版もあるので一応紹介する。Twitter での観測範囲内ではあるが、fzf-tmux の peco 版を望む声はあるようだ。

    # 必要ならばアーキテクチャ指定
    zplug "peco/peco", as:command, from:gh-r, of:"*amd64*"
    
    # fzf-tmux の peco バージョン
    zplug "b4b4r07/dotfiles", as:command, of:bin/peco-tmux
    
  • zsh-gomi

    拙作で申し訳ないが、個人的にとても有用だと思っているコマンド。ターミナル上でゴミ箱チックなことをする。fzf に依存する。依存しない Go 実装もあるが、fzf のちからをフルに使えるこっちのほうが有用。捨てたファイルの中身をシンタックスハイライト付きで確認したり、ゴミ箱の中から複数選択して戻したり、本当に削除したり、カレントディレクトリを動かずになんでも操作できるのが強すぎる。

    # file:rm とすれば rm にリネームして使える(おすすめしないけど)
    zplug "b4b4r07/zsh-gomi", as:command, of:bin, file:rm
    

    ちなみに、補完ファイルも有効になるはずなので、タブを押してみましょう。

まとめ

本記事では有用な zsh プラグイン(と、コマンドを少し)を紹介してきた。

Vim は エディタだからだろうが豊富にプラグインが存在し活発に開発されている。tmux も最近になってプラグインマネージャが確立し、プラグイン管理ができるようになってきている。しかし、zsh はどうだろうか。プラグインという概念が希薄な気がしてならない。zsh においてももっとプラグイン開発が盛んになって、より便利な CLI ライフを送れたらいいのになと思う。