SlideShare a Scribd company logo
1 of 60
Download to read offline
pecoを使おう 
2014/11/30 
三宅 英明(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とは 
言葉では説明しにくい
pecoとは 
典型的には、コマンドライン履歴か 
ら選んで、それを実行する
pecoとは 
今年はやった
pecoとは 
Anything風インタフェースとか呼ば 
れることもある
pecoとは 
Anything風インタフェースというの 
は、もともとEmacsのやつ 
pecoもそれに似てる
pecoとは 
似てるけど、たぶん元のEmacsのや 
つとはちょっと違う 
なので、「pecoはAnythingですー」 
とか適当に言うと、たぶんEmacs原 
理主義の人に怒られる 
気をつけたほうがいい
pecoとは 
使ってみないとよく分からない 
使ってみましょう
pecoを使おう 
pecoとは 
pecoのインストール 
pecoの基本 
pecoで使う関数を作る
pecoのインストール 
https://github.com/peco/ 
peco/releasesにバイナリがあるの 
で、ダウンロードして好きな場所に 
置く 
実行パーミッションを付ける
pecoのインストール 
安定したバージョンをインストール 
できる 
たぶん一番安心して使える方法 
バージョンアップのときに手動でダ 
ウンロードしないといけないのが欠 
点
pecoのインストール 
Macを使っている場合はHomebrew 
でもインストールできる 
% brew tap peco/peco 
% brew install peco
pecoのインストール 
最新版とは限らない。若干バージョ 
ンが古いこともある 
更新はbrew update pecoででき 
る。楽 
Macでしかできない 
Macの人にはわりとおすすめ
pecoのインストール 
pecoはGoで実装されている 
Goのパッケージシステムを使っても 
インストールできる 
% go getとかする
pecoのインストール 
ソースからコンパイルする 
Goの開発環境をインストールしな 
いといけない 
たぶん、タグが付けられた安定版と 
は限らない 
単に使いたいだけの人にとっては、 
ちょっとやりすぎ
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で絞り込む 
# その結果を一旦変数に入れる 
cmd=$(history | peco) 
# それをそのまま実行する 
eval "$cmd"
pecoで使う関数を作る 
一応これでもできる 
function peco-execute-history() { 
local item 
item=$(builtin history -n -r 1 | peco) 
if [[ -z "$item" ]]; then 
return 1 
fi 
eval "$item" 
} 
alias eh=peco-execute-history
pecoで使う関数を作る 
% ehとか打たないとだめで、なん 
かおしゃれじゃない 
特に、いちいち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で使う関数を作る 
注意としては、BUFFER=”$item”とい 
うのはこの形の書き方のときしか使え 
ない 
function peco-execute-history() { 
# この中に処理を書く 
} 
zle -N peco-execute-history 
bindkey '^x^r' peco-execute-history
pecoで使う関数を作る 
zle -Nとかいうのは、コマンドライン 
を操作する処理を自分で作っている 
イメージ 
「コマンドラインを操作する処理」と 
いうのは、Ctrl+fで右に動く、とかそ 
ういうの 
zshではそういうのを自分で作れる
pecoで使う関数を作る 
さらにその中では現在のコマンドラ 
インとかを変更できる 
BUFFERは現在のコマンドラインの 
内容を表す変数で、読み書き両方 
可能 
こいつに代入して、実行してる
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を 
押す)をなくしただけ 
これも便利
ちょっと余談 
「履歴から選んで実行する」はCtrl 
+x Ctrl+r 
「履歴から選んでコマンドラインに 
挿入する」はCtrl+x Ctrl+p 
別のキーバインドに割り当ててる
ちょっと余談 
本当は表示される候補を見ながら 
「すぐ実行するのか」「コマンドライ 
ンに挿入するのか」を選びたい
ちょっと余談 
Ctrl+x Ctrl+rで起動 
すぐに実行したいときはEnterで決 
定 
コマンドラインに挿入したいときは 
Ctrl+oで決定 
とか
ちょっと余談 
すぐに実行すればよいのか、コマン 
ドラインに挿入したいのか(つまり、 
ちょっと変更したいのか)は、候補を 
見ないとよく分からない
ちょっと余談 
pecoの場合は 
「1. 候補一覧を作る」 
「2. 候補を選ぶ」 
「3. 選んだ候補に対して動作を行 
う」 
の3つが完全に分かれてる
ちょっと余談 
選んだ結果を文字列として出力して 
るだけ 
「それに対してどういう動作を行う 
か」という情報はpecoからは送れ 
ない
ちょっと余談 
(確か)EmacsのAnythingはこのへ 
んがちゃんとしてる 
さっき言った3つが分かれていない 
から 
「何を選んだのか」と「どういう動作 
を行いたいか」の両方が次に伝わっ 
ている
ちょっと余談 
でもpecoでは分かれているから、他 
と組み合わせるのが簡単 
peco以外の部分は一般的なシェ 
ルスクリプトで書ける
ちょっと余談 
どっちが良いかは一概に言えない 
でも、pecoの方がシンプルでよさそ 
う
ちょっと余談 
余談終わり
pecoで使う関数を作る 
ここまででできたこと 
「履歴から選んで実行する」 
「履歴から選んでコマンドラインに 
挿入する」
pecoで使う関数を作る 
他には? 
もちろん工夫次第でいろいろできる
pecoで使う関数を作る 
工夫次第? 
工夫次第 = シェルスクリプトでがん 
ばれば 
がんばりたくない
pecoで使う関数を作る 
シェルスクリプトが苦手な人はどう 
したらええの? 
そういう人向けのやつがあります
pecoで使う関数を作る 
続きは次の発表で
pecoを使おう 
ありがとうございました

More Related Content

What's hot

2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみるairtoxin Ishii
 
シェルで繰り返し処理
シェルで繰り返し処理シェルで繰り返し処理
シェルで繰り返し処理Katsuya Tashiro
 
艦これタイマーシリーズご紹介
艦これタイマーシリーズご紹介艦これタイマーシリーズご紹介
艦これタイマーシリーズご紹介koedoyoshida
 
Indentとの戦い-艦これOSS便利ツールの紹介-
Indentとの戦い-艦これOSS便利ツールの紹介-Indentとの戦い-艦これOSS便利ツールの紹介-
Indentとの戦い-艦これOSS便利ツールの紹介-koedoyoshida
 
Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門Atsushi Tadokoro
 
Let's reading OSS's source
Let's reading OSS's sourceLet's reading OSS's source
Let's reading OSS's sourcetemama
 
Vim の話
Vim の話Vim の話
Vim の話cohama
 
Hello World Python featuring GAE
Hello World Python featuring GAEHello World Python featuring GAE
Hello World Python featuring GAEMaito Kuwahara
 
Windows スクリプトセミナー 基本編
Windows スクリプトセミナー 基本編Windows スクリプトセミナー 基本編
Windows スクリプトセミナー 基本編junichi anno
 
Interactive Music II SuperCollider入門 5 時間構造をつくる
Interactive Music II SuperCollider入門 5  時間構造をつくるInteractive Music II SuperCollider入門 5  時間構造をつくる
Interactive Music II SuperCollider入門 5 時間構造をつくるAtsushi Tadokoro
 
zshという選択肢
zshという選択肢zshという選択肢
zshという選択肢manaten
 
私がPerlを使う理由
私がPerlを使う理由私がPerlを使う理由
私がPerlを使う理由Yohei Azekatsu
 
What's Temporal model FuelPHP東京勉強会03
What's Temporal model FuelPHP東京勉強会03What's Temporal model FuelPHP東京勉強会03
What's Temporal model FuelPHP東京勉強会03Takayuki Yamaguchi
 
Python開発環境三種の神器
Python開発環境三種の神器Python開発環境三種の神器
Python開発環境三種の神器Yukitaka Uchikoshi
 
TensorFlowの導入
TensorFlowの導入TensorFlowの導入
TensorFlowの導入yuf yufkky
 
minami.rb最初で最後のLT大会「Wakayama.rbの紹介」
minami.rb最初で最後のLT大会「Wakayama.rbの紹介」minami.rb最初で最後のLT大会「Wakayama.rbの紹介」
minami.rb最初で最後のLT大会「Wakayama.rbの紹介」三七男 山本
 
はじめてのLinux
はじめてのLinuxはじめてのLinux
はじめてのLinuxAmelieff
 

What's hot (20)

Fabric Essentials
Fabric EssentialsFabric Essentials
Fabric Essentials
 
2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる
 
シェルで繰り返し処理
シェルで繰り返し処理シェルで繰り返し処理
シェルで繰り返し処理
 
艦これタイマーシリーズご紹介
艦これタイマーシリーズご紹介艦これタイマーシリーズご紹介
艦これタイマーシリーズご紹介
 
Indentとの戦い-艦これOSS便利ツールの紹介-
Indentとの戦い-艦これOSS便利ツールの紹介-Indentとの戦い-艦これOSS便利ツールの紹介-
Indentとの戦い-艦これOSS便利ツールの紹介-
 
Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門
 
Let's reading OSS's source
Let's reading OSS's sourceLet's reading OSS's source
Let's reading OSS's source
 
Vim の話
Vim の話Vim の話
Vim の話
 
Hello World Python featuring GAE
Hello World Python featuring GAEHello World Python featuring GAE
Hello World Python featuring GAE
 
Windows スクリプトセミナー 基本編
Windows スクリプトセミナー 基本編Windows スクリプトセミナー 基本編
Windows スクリプトセミナー 基本編
 
Interactive Music II SuperCollider入門 5 時間構造をつくる
Interactive Music II SuperCollider入門 5  時間構造をつくるInteractive Music II SuperCollider入門 5  時間構造をつくる
Interactive Music II SuperCollider入門 5 時間構造をつくる
 
Python入門
Python入門Python入門
Python入門
 
zshという選択肢
zshという選択肢zshという選択肢
zshという選択肢
 
私がPerlを使う理由
私がPerlを使う理由私がPerlを使う理由
私がPerlを使う理由
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
What's Temporal model FuelPHP東京勉強会03
What's Temporal model FuelPHP東京勉強会03What's Temporal model FuelPHP東京勉強会03
What's Temporal model FuelPHP東京勉強会03
 
Python開発環境三種の神器
Python開発環境三種の神器Python開発環境三種の神器
Python開発環境三種の神器
 
TensorFlowの導入
TensorFlowの導入TensorFlowの導入
TensorFlowの導入
 
minami.rb最初で最後のLT大会「Wakayama.rbの紹介」
minami.rb最初で最後のLT大会「Wakayama.rbの紹介」minami.rb最初で最後のLT大会「Wakayama.rbの紹介」
minami.rb最初で最後のLT大会「Wakayama.rbの紹介」
 
はじめてのLinux
はじめてのLinuxはじめてのLinux
はじめてのLinux
 

Viewers also liked

Git introduction
Git introductionGit introduction
Git introductiontotzyuta
 
Ruby 勉強会 第42回 発表資料 IO について
Ruby 勉強会 第42回 発表資料 IO についてRuby 勉強会 第42回 発表資料 IO について
Ruby 勉強会 第42回 発表資料 IO についてTomoya Kawanishi
 
EPUBのナビゲーションを理解しよう
EPUBのナビゲーションを理解しようEPUBのナビゲーションを理解しよう
EPUBのナビゲーションを理解しようHiroshi Takase
 
はじめてのアマゾンクラウド②[仮想サーバ(Amazon EC2)を立ち上げる]
はじめてのアマゾンクラウド②[仮想サーバ(Amazon EC2)を立ち上げる]はじめてのアマゾンクラウド②[仮想サーバ(Amazon EC2)を立ち上げる]
はじめてのアマゾンクラウド②[仮想サーバ(Amazon EC2)を立ち上げる]SORACOM, INC
 
DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素Takahiro YAMADA
 
An Introduction to Visual Thinking
An Introduction to Visual ThinkingAn Introduction to Visual Thinking
An Introduction to Visual ThinkingRyan Coleman
 
セクシー女優で学ぶ画像分類入門
セクシー女優で学ぶ画像分類入門セクシー女優で学ぶ画像分類入門
セクシー女優で学ぶ画像分類入門Takami Sato
 

Viewers also liked (10)

Led cube lt
Led cube ltLed cube lt
Led cube lt
 
Git introduction
Git introductionGit introduction
Git introduction
 
Ruby 勉強会 第42回 発表資料 IO について
Ruby 勉強会 第42回 発表資料 IO についてRuby 勉強会 第42回 発表資料 IO について
Ruby 勉強会 第42回 発表資料 IO について
 
WordPressで電子書籍
WordPressで電子書籍WordPressで電子書籍
WordPressで電子書籍
 
EPUBのナビゲーションを理解しよう
EPUBのナビゲーションを理解しようEPUBのナビゲーションを理解しよう
EPUBのナビゲーションを理解しよう
 
はじめてのアマゾンクラウド②[仮想サーバ(Amazon EC2)を立ち上げる]
はじめてのアマゾンクラウド②[仮想サーバ(Amazon EC2)を立ち上げる]はじめてのアマゾンクラウド②[仮想サーバ(Amazon EC2)を立ち上げる]
はじめてのアマゾンクラウド②[仮想サーバ(Amazon EC2)を立ち上げる]
 
DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素
 
An Introduction to Visual Thinking
An Introduction to Visual ThinkingAn Introduction to Visual Thinking
An Introduction to Visual Thinking
 
セクシー女優で学ぶ画像分類入門
セクシー女優で学ぶ画像分類入門セクシー女優で学ぶ画像分類入門
セクシー女優で学ぶ画像分類入門
 
Get started with dropbox
Get started with dropboxGet started with dropbox
Get started with dropbox
 

Similar to pecoを使おう

「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12Takanori Suzuki
 
super_unkoをスーパーキレイにした
super_unkoをスーパーキレイにしたsuper_unkoをスーパーキレイにした
super_unkoをスーパーキレイにしたjiro4989
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftTomohiro Kumagai
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp CodereadingHiro Yoshioka
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すAromaBlack
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of PythonTakanori Suzuki
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミングlestrrat
 
3分でサーバオペレーションコマンドを作る技術
3分でサーバオペレーションコマンドを作る技術3分でサーバオペレーションコマンドを作る技術
3分でサーバオペレーションコマンドを作る技術Kei IWASAKI
 
Symfony2 How to create your Bundle
Symfony2 How to create your BundleSymfony2 How to create your Bundle
Symfony2 How to create your Bundlechobi e
 
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティスどこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス5mingame2
 
20090704rubyist九州
20090704rubyist九州20090704rubyist九州
20090704rubyist九州koki_h
 
HSPでおいしいスープを飲む方法
HSPでおいしいスープを飲む方法HSPでおいしいスープを飲む方法
HSPでおいしいスープを飲む方法Hiroaki Murayama
 
C言語 学習教材
C言語 学習教材C言語 学習教材
C言語 学習教材Jun MITANI
 
Cakephpstudy5 hacks jp
Cakephpstudy5 hacks jpCakephpstudy5 hacks jp
Cakephpstudy5 hacks jpHiroki Shimizu
 
プログラミングの基礎振り返りスライド1
プログラミングの基礎振り返りスライド1プログラミングの基礎振り返りスライド1
プログラミングの基礎振り返りスライド1sunotora
 

Similar to pecoを使おう (20)

pecoを使おう
pecoを使おうpecoを使おう
pecoを使おう
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
 
super_unkoをスーパーキレイにした
super_unkoをスーパーキレイにしたsuper_unkoをスーパーキレイにした
super_unkoをスーパーキレイにした
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指す
 
Ansible入門...?
Ansible入門...?Ansible入門...?
Ansible入門...?
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミング
 
3分でサーバオペレーションコマンドを作る技術
3分でサーバオペレーションコマンドを作る技術3分でサーバオペレーションコマンドを作る技術
3分でサーバオペレーションコマンドを作る技術
 
Pronama 0707 wf4
Pronama 0707 wf4Pronama 0707 wf4
Pronama 0707 wf4
 
Symfony2 How to create your Bundle
Symfony2 How to create your BundleSymfony2 How to create your Bundle
Symfony2 How to create your Bundle
 
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティスどこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス
 
anyframeを使おう
anyframeを使おうanyframeを使おう
anyframeを使おう
 
20090704rubyist九州
20090704rubyist九州20090704rubyist九州
20090704rubyist九州
 
HSPでおいしいスープを飲む方法
HSPでおいしいスープを飲む方法HSPでおいしいスープを飲む方法
HSPでおいしいスープを飲む方法
 
C言語 学習教材
C言語 学習教材C言語 学習教材
C言語 学習教材
 
Cakephpstudy5 hacks jp
Cakephpstudy5 hacks jpCakephpstudy5 hacks jp
Cakephpstudy5 hacks jp
 
入門 シェル実装
入門 シェル実装入門 シェル実装
入門 シェル実装
 
プログラミングの基礎振り返りスライド1
プログラミングの基礎振り返りスライド1プログラミングの基礎振り返りスライド1
プログラミングの基礎振り返りスライド1
 

pecoを使おう