こちらでpecoの基礎の基礎が紹介されており、またQiitaのpecoタグには多くの応用例が紹介されています。
今回はこれらの間に位置するpecoの基礎の応用として、 よりpecoを活かすためのフィルタした結果の利用方法をいくつか紹介したいと思います。
こちらはzshを前提にしています。
フィルタ結果を標準出力
一番基本的な使い方です。実際このような使い方は少ないですね。
$ ls
bin/ config/ elpa/ etc/ init.el* package.d/ README.md recipes/
$ ls | peco
# ここからpeco
QUERY> read
README.md
# ここまでpeco
README.md
パイプに渡す
xargsを使ってパイプで渡すこともできます。
$ ls
bin/ config/ elpa/ etc/ init.el* package.d/ README.md recipes/
$ ls | peco | xargs ls -l
# ここからpeco
QUERY> read
README.md
# ここまでpeco
-rw-rw-r-- 1 sona sona 797 Aug 30 00:29 README.md
変数に代入して再利用する
$()で囲むと実行結果が返されるため、それを変数に代入して再利用することができます。
$ ls
bin/ config/ elpa/ etc/ init.el* package.d/ README.md recipes/
$ README=$(ls | peco)
# ここからpeco
QUERY> read
README.md
# ここまでpeco
ls -l $README
-rw-rw-r-- 1 sona sona 797 Aug 30 00:29 README.md
pecoを組み合わせたオリジナルの関数を作成してコマンドとして実行
これによりパイプでpecoに出力結果を渡す処理をコマンドに入力せずにpecoが利用できるようになります。
zshに以下の設定を追加します。
function ls-peco() {
FILTERD_LS=$(ls | peco)
echo $FILTERD_LS
}
$ ls
bin/ config/ elpa/ etc/ init.el* package.d/ README.md recipes/
作成した関数をコマンドとして実行
$ ls-peco
# ここからpeco
QUERY> read
README.md
# ここまでpeco
-rw-rw-r-- 1 sona sona 797 Aug 30 00:29 README.md
作成した関数をグローバルエイリアスに登録
zshにはグローバルエイリアスという便利な機能があります。
これにより1文字入力するだけでpecoを組み合わせた機能を呼び出すことができます。
zshに以下の設定を追加します。
function ls-peco() {
FILTERD_LS=$(ls | peco)
echo $FILTERD_LS
}
alias -g L='$(ls-peco)'
$ ls
bin/ config/ elpa/ etc/ init.el* package.d/ README.md recipes/
$ ls -l L
# ここからpeco
QUERY> read
README.md
# ここまでpeco
-rw-rw-r-- 1 sona sona 797 Aug 30 00:29 README.md
作成した関数をショートカットに登録
こちらもショートカット1発でpecoの機能が呼び出せるようになります。上記のグローバルエイリアスとは異なり、コマンドの実行は行われずコマンドの編集を継続することができます。
zshに以下の設定を追加します。
function ls-peco() {
FILTERD_LS=$(ls | peco)
BUFFER=${BUFFER}${FILTERD_LS}
CURSOR=$#BUFFER
}
zle -N ls-peco
bindkey "^q" ls-peco
$ ls
bin/ config/ elpa/ etc/ init.el* package.d/ README.md recipes/
$ ls -l ここでCtrl-qを入力
# ここからpeco
QUERY> read
README.md
# ここまでpeco
$ ls -l README.md
pecoの基礎の応用の応用
あとはBash - pecoの基礎の基礎 - Qiitaにも書いてありますが、みんなの応用例をpecoタグから探して上記の中で自分に適した入力方法にカスタマイズするとよりpecoを活かせると思います。
Git向けの応用例です。
pecoでgit向けの汎用的なフィルターを2つ作成してみた