SlideShare a Scribd company logo
pecoを使おう2015/05/04
三宅 英明(mollifier)
自己紹介
名前: 三宅 英明
Twitter: @mollifier
はてなID: mollifier
神戸のプログラマ
好きなもの
zsh
vim
vimperator
ブログとか
はてなブログ
http://mollifier.hatenablog.com/
Twitter
http://twitter.com/mollifier
Qiita
http://qiita.com/mollifier
pecoを使おう
pecoとは
pecoのインストール
pecoの基本
pecoで使う関数を作る
pecoを使おう
pecoとは
pecoのインストール
pecoの基本
pecoで使う関数を作る
pecoとは
インクリメンタルに絞り込んで、候補
から選んでなんかするやつ
pecoとは
プロジェクトページのURLは
https://github.com/peco/peco
pecoとは
言葉では説明しにくい
pecoとは
典型的には、コマンドライン履歴か
ら選んで、それを実行する
pecoとは
去年はやった
pecoとは
Anything風インタフェースとか呼ば
れることもある
pecoとは
Anything風インタフェースというの
は、もともとEmacsのやつ
Vimにもunite.vimという似たような
やつがある
pecoもそれに似てる
pecoとは
似てるけど、たぶん元のEmacsのや
つとはちょっと違う
なので、「pecoはAnythingですー
^^」とか適当に言うと、たぶん本気
のEmacsの人に怒られる
気をつけたほうがいい
pecoとは
使ってみないとよく分からない
使ってみましょう
pecoを使おう
pecoとは
pecoのインストール
pecoの基本
pecoで使う関数を作る
pecoのインストール
https://github.com/peco/
peco/releases にバイナリがある
ので、ダウンロードして好きな場所
に置く
実行パーミッションを付ける
pecoのインストール
安定したバージョンをインストール
できる
たぶん一番安心して使える方法
バージョンアップのときに手動でダ
ウンロードしないといけないのが欠
点
pecoのインストール
Macを使っている場合はHomebrew
でもインストールできる
% brew install peco
pecoのインストール
前はbrew tap peco/pecoというのが
必要だったけど、今はいらない
% brew tap peco/peco #<= これは不要
pecoのインストール
最新版とは限らない。若干バージョ
ンが古いこともある
更新はbrew update pecoででき
る。楽
Macの人にはわりとおすすめ
pecoのインストール
Macの人はbrew
それ以外の人はバイナリを手動で
ダウンロード
pecoを使おう
pecoとは
pecoのインストール
pecoの基本
pecoで使う関数を作る
pecoの基本
とりあえずpecoを使ってみる
pecoの基本
% cat /etc/passwd | peco
pecoの基本
要するに絞り込んで出力してるだけ
絞り込むときにインクリメンタルに絞
り込める
grepを手動でやってる感じ
pecoの基本
動作自体は非常に単純
peco単体では役に立たない
pecoの基本
たぶん意図的に単純にしてる
単純だから、他のコマンドと組み合
わせやすい
cutとかsedとかawkとか
複数の候補から選ばせるときに、
「選ばせる」という操作だけをpeco
に任せる感じ
pecoを使おう
pecoとは
pecoのインストール
pecoの基本
pecoで使う関数を作る
pecoで使う関数を作る
pecoは入力を絞り込んで出力する
だけのツール
他と組み合わせて使う
「他」の部分を作ってみましょう
pecoで使う関数を作る
pecoは入力を絞り込んで出力する
だけのツール
pecoで使う関数を作る
「入力」が必要
pecoの出力を「どうするか」という
処理も必要
pecoで使う関数を作る
典型的な例
「入力」 = コマンドライン履歴
「どうするか」 = コマンドとみなして
そのまま実行する
pecoで使う関数を作る
雰囲気でいうとこんな感じ
# コマンドライン履歴をpecoで絞り込む
# その結果を一旦変数に入れる
cmd=$(history | peco)
# それをそのまま実行する
eval "$cmd"
pecoで使う関数を作る
簡単な例
function h() {
local item
item=$(builtin history -n -r 1 | peco)
if [[ -z "$item" ]]; then
return 1
fi
eval "$item"
}
pecoで使う関数を作る
コマンドラインでhと打って使う
pecoで使う関数を作る
いちいちEnterを押すのがめんどう
という人は、Ctrl+rみたいなキーバ
インドで実行することもできる
pecoで使う関数を作る
Ctrl+x Ctrl+rで実行する例
何かのキーバインドで関数を呼び出す
ときはこう書く
function peco-execute-history() {
# この中に処理を書く
}
zle -N peco-execute-history
bindkey '^x^r' peco-execute-history
pecoで使う関数を作る
Ctrl+x Ctrl+rで実行する例
function peco-execute-history() {
local item
item=$(builtin history -n -r 1 | peco)
if [[ -z "$item" ]]; then
return 1
fi
BUFFER="$item"
zle accept-line
}
zle -N peco-execute-history
bindkey '^x^r' peco-execute-history
pecoで使う関数を作る
BUFFER="$item" で、今のコマンド
ラインの内容を置き換える
zle accept-lineでコマンドライン
を実行する。つまりEnterを押したの
と同じ
pecoで使う関数を作る
zle -Nとかいうのは、コマンドラインを
操作する処理を自分で作っているイメ
ージ
function peco-execute-history() {
# この中に処理を書く
}
zle -N peco-execute-history
bindkey '^x^r' peco-execute-history
pecoで使う関数を作る
「コマンドラインを操作する処理」と
いうのは、Ctrl+fでカーソルを右に
動かす、とかそういうの
zshではそういうのを自分で作れる
pecoで使う関数を作る
さらにその中では現在のコマンドラ
インとかを変更できる
pecoで使う関数を作る
「手でコマンドラインを入力して」
「Enterを押す」という操作をzshの
シェルスクリプトから操作できる
peco自体は他のシェルでも使える
けど、zshはこのへんが柔軟なので
pecoと組み合わせて使いやすい
pecoで使う関数を作る
さっきと同じだけど、コマンドラインに
代入するだけの例
function peco-put-history() {
local item
item=$(builtin history -n -r 1 | peco)
if [[ -z "$item" ]]; then
return 1
fi
BUFFER="$item"
CURSOR=$#BUFFER
}
zle -N peco-put-history
bindkey '^x^p' peco-put-history
pecoで使う関数を作る
さっきのzle accept-line(Enterを
押す)をなくしただけ
これも便利
pecoで使う関数を作る
ここまででできたこと
「履歴から選んで実行する」
「履歴から選んでコマンドラインに
挿入する」
pecoで使う関数を作る
他には?
もちろん工夫次第でいろいろできる
pecoで使う関数を作る
工夫次第?
工夫次第 = シェルスクリプトでがん
ばれば
pecoで使う関数を作る
普通のシェルスクリプトで書ける
head, sort, uniq, sed, awk など
など
テキスト処理なので、Perl, Rubyと
かを使ってもいい
pecoで使う関数を作る
シェルスクリプトでがんばれば
がんばりたくない
pecoで使う関数を作る
シェルスクリプトが苦手な人はどう
したらええの?
そういう人向けのやつがあります
pecoで使う関数を作る
続きは次の発表で
pecoを使おう
ありがとうございました

More Related Content

pecoを使おう