読者です 読者をやめる 読者になる 読者になる

$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

pecoを使い始めた

tech

 なんかpercol最近いきなり流行ってるなーと思ってたら、percolのgo版pecoがいつの間にか出てて流行ってた。ターミナル版anything的なpercolをzawの代わりに試してみた - $shibayu36->blog;みたいな感じで、昔からpercol使っててまあいいかと思ってたけど

  • 設定ファイルが分かりやすい
  • brewで簡単に入れることが出来る
  • そこそこ開発されてる

というメリットもありそうなので乗り換えようとしてみている。

https://github.com/peco/peco

pecoのファイル運用

 前と大体同じ感じでやる。基本的にこういうツールは自分でいろいろ作りたくなってきて、設定が増えてきて破滅するので、ファイルを置くディレクトリを決めておいてそこに置いておくことにする。

  • .zshrc : 決めたディレクトリのファイルの全ロードと、キーバインドの設定
  • ~/.zsh/peco-sources/ : peco用の設定ファイルを置いておく用

.zshrc

# setting for peco
for f (~/.zsh/peco-sources/*) source "${f}" # load peco sources
bindkey '^r' peco-select-history
bindkey '^@' peco-cdr

~/.zsh/peco-sources/

$ tree ~/.zsh/peco-sources
~/.zsh/peco-sources
├── cdr.zsh
└── select-history.zsh

あとはこのディレクトリにいろいろ作れば良い。

pecoのキーバインド設定

よく使うコマンドくらいはemacsっぽくしたいので変更。~/.config/peco/config.jsonにひとまず以下のように書いた。

{
    "Keymap": {
        "C-p": "peco.SelectPrevious",
        "C-n": "peco.SelectNext",
        "C-g": "peco.Cancel",
        "C-v": "peco.SelectNextPage"
    }
}

(追記)
C-p, C-nの設定などは要らないようでした。M-vの設定もできるかも?僕はEmacs上ではCmd-vをM-vとして利用していて、これはterminal上では貼り付けになっちゃうので、SelectPreviousPageの設定はしてませんでした。


peco-select-history

 ひとまずよく使うヒストリ検索から。zshキーバインドで使えるように定義し、C-r -> 選択 -> 選択がBUFFERにという風に利用できるようになっている。まあpercolの例のほぼパクリ。

~/.zsh/peco-sources/select-history.zsh

function peco-select-history() {
    local tac
    if which tac > /dev/null; then
        tac="tac"
    else
        tac="tail -r"
    fi
    BUFFER=$(history -n 1 | \
        eval $tac | \
        peco --query "$LBUFFER")
    CURSOR=$#BUFFER
    zle clear-screen
}
zle -N peco-select-history

これだけで便利。これをキーバインドに登録しておく。
.zshrc

bindkey '^r' peco-select-history

peco-cdr

 あとは最近訪れたディレクトリにpecoで行けるようにするやつ。cdr -l使うと便利にできる。

~/.zsh/peco-sources/cdr.zsh

function peco-cdr () {
    local selected_dir=$(cdr -l | awk '{ print $2 }' | peco)
    if [ -n "$selected_dir" ]; then
        BUFFER="cd ${selected_dir}"
        zle accept-line
    fi
    zle clear-screen
}
zle -N peco-cdr

選択結果がなかったら移動せずにおいてくれる。

これもキーバインド登録。
.zshrc

bindkey '^@' peco-cdr

まとめ

peco簡単に入れることができるし便利。