SlideShare a Scribd company logo
1 of 54
Download to read offline
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

What's hot

C# から Ruby に乗り換えた
C# から Ruby に乗り換えたC# から Ruby に乗り換えた
C# から Ruby に乗り換えた
Hideaki Miyake
 
自己紹介という名のVimのススメ
自己紹介という名のVimのススメ自己紹介という名のVimのススメ
自己紹介という名のVimのススメ
haya14busa
 
Wordcamp yokohama2010
Wordcamp yokohama2010Wordcamp yokohama2010
Wordcamp yokohama2010
yunico
 
Pythonで二段階認証
Pythonで二段階認証Pythonで二段階認証
Pythonで二段階認証
aoshiman
 
Devとopsをつなぐpuppet
DevとopsをつなぐpuppetDevとopsをつなぐpuppet
Devとopsをつなぐpuppet
yuzorock
 
ゴリラ.vim 第6回 - Vim はじめました
ゴリラ.vim 第6回 - Vim はじめましたゴリラ.vim 第6回 - Vim はじめました
ゴリラ.vim 第6回 - Vim はじめました
Michiyo Chuman
 

What's hot (20)

C# から Ruby に乗り換えた
C# から Ruby に乗り換えたC# から Ruby に乗り換えた
C# から Ruby に乗り換えた
 
15分でわかる zsh
15分でわかる zsh15分でわかる zsh
15分でわかる zsh
 
Symfony2 workshop-1
Symfony2 workshop-1Symfony2 workshop-1
Symfony2 workshop-1
 
rucs_vim LT
rucs_vim LTrucs_vim LT
rucs_vim LT
 
Ready Player MeのアバターをVRMにする(動画と一緒に見てください)。
Ready Player MeのアバターをVRMにする(動画と一緒に見てください)。Ready Player MeのアバターをVRMにする(動画と一緒に見てください)。
Ready Player MeのアバターをVRMにする(動画と一緒に見てください)。
 
LT middleman で tumblr テーマ が開発してみた件
LT middleman で tumblr テーマ が開発してみた件LT middleman で tumblr テーマ が開発してみた件
LT middleman で tumblr テーマ が開発してみた件
 
自己紹介という名のVimのススメ
自己紹介という名のVimのススメ自己紹介という名のVimのススメ
自己紹介という名のVimのススメ
 
Wordcamp yokohama2010
Wordcamp yokohama2010Wordcamp yokohama2010
Wordcamp yokohama2010
 
マルチブラウザやりました (DMM.Study Night)
マルチブラウザやりました (DMM.Study Night)マルチブラウザやりました (DMM.Study Night)
マルチブラウザやりました (DMM.Study Night)
 
Pythonで二段階認証
Pythonで二段階認証Pythonで二段階認証
Pythonで二段階認証
 
第23回東京ブロガーミートアップ「動画について」
第23回東京ブロガーミートアップ「動画について」第23回東京ブロガーミートアップ「動画について」
第23回東京ブロガーミートアップ「動画について」
 
シェル芸生放送
シェル芸生放送シェル芸生放送
シェル芸生放送
 
タイル型ウィンドウマネージャのススメ
タイル型ウィンドウマネージャのススメタイル型ウィンドウマネージャのススメ
タイル型ウィンドウマネージャのススメ
 
テストを書くのに挫折したあとやったこと
テストを書くのに挫折したあとやったことテストを書くのに挫折したあとやったこと
テストを書くのに挫折したあとやったこと
 
サーバ擬人化ユーザ会Lt資料 qpstudy lite
サーバ擬人化ユーザ会Lt資料 qpstudy liteサーバ擬人化ユーザ会Lt資料 qpstudy lite
サーバ擬人化ユーザ会Lt資料 qpstudy lite
 
3分 gem クッキング
3分 gem クッキング3分 gem クッキング
3分 gem クッキング
 
制限のあるプラットフォームでもVJしたい!
制限のあるプラットフォームでもVJしたい!制限のあるプラットフォームでもVJしたい!
制限のあるプラットフォームでもVJしたい!
 
Devとopsをつなぐpuppet
DevとopsをつなぐpuppetDevとopsをつなぐpuppet
Devとopsをつなぐpuppet
 
会議における段取りのお話
会議における段取りのお話会議における段取りのお話
会議における段取りのお話
 
ゴリラ.vim 第6回 - Vim はじめました
ゴリラ.vim 第6回 - Vim はじめましたゴリラ.vim 第6回 - Vim はじめました
ゴリラ.vim 第6回 - Vim はじめました
 

Similar to pecoを使おう

FlexUnit4 & FlexMonkey を使おう
FlexUnit4 & FlexMonkey を使おうFlexUnit4 & FlexMonkey を使おう
FlexUnit4 & FlexMonkey を使おう
Shinjiro Watanabe
 
Windowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようWindowsにpythonをインストールしてみよう
Windowsにpythonをインストールしてみよう
Kenji NAKAGAKI
 

Similar to pecoを使おう (20)

pecoを使おう
pecoを使おうpecoを使おう
pecoを使おう
 
大好きなPecoの話
大好きなPecoの話大好きなPecoの話
大好きなPecoの話
 
Pyconjp2016 pyftplib
Pyconjp2016 pyftplibPyconjp2016 pyftplib
Pyconjp2016 pyftplib
 
FlexUnit4 & FlexMonkey を使おう
FlexUnit4 & FlexMonkey を使おうFlexUnit4 & FlexMonkey を使おう
FlexUnit4 & FlexMonkey を使おう
 
Firefox os simulatorについて
Firefox os simulatorについてFirefox os simulatorについて
Firefox os simulatorについて
 
2015/10/17 第10回G-Study発表資料-あの日見たgit_hubなstarを君達はまだ知らない。
2015/10/17 第10回G-Study発表資料-あの日見たgit_hubなstarを君達はまだ知らない。2015/10/17 第10回G-Study発表資料-あの日見たgit_hubなstarを君達はまだ知らない。
2015/10/17 第10回G-Study発表資料-あの日見たgit_hubなstarを君達はまだ知らない。
 
The tale of I and python / Python とのはなし
The tale of I and python / Python とのはなしThe tale of I and python / Python とのはなし
The tale of I and python / Python とのはなし
 
PHPMATSURI2011 LT大会
PHPMATSURI2011 LT大会PHPMATSURI2011 LT大会
PHPMATSURI2011 LT大会
 
OmegaTでドキュメント翻訳
OmegaTでドキュメント翻訳OmegaTでドキュメント翻訳
OmegaTでドキュメント翻訳
 
Goで始める言語処理系実装入門
Goで始める言語処理系実装入門Goで始める言語処理系実装入門
Goで始める言語処理系実装入門
 
WordPressで行う継続的インテグレーション入門編
WordPressで行う継続的インテグレーション入門編WordPressで行う継続的インテグレーション入門編
WordPressで行う継続的インテグレーション入門編
 
Windowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようWindowsにpythonをインストールしてみよう
Windowsにpythonをインストールしてみよう
 
Pythonでpdfをいじってみる
PythonでpdfをいじってみるPythonでpdfをいじってみる
Pythonでpdfをいじってみる
 
エンタープライズパッケージを利用しました〜HTML Exporter編〜
エンタープライズパッケージを利用しました〜HTML Exporter編〜エンタープライズパッケージを利用しました〜HTML Exporter編〜
エンタープライズパッケージを利用しました〜HTML Exporter編〜
 
意外と知らないFilemakerの世界
意外と知らないFilemakerの世界意外と知らないFilemakerの世界
意外と知らないFilemakerの世界
 
世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015
 
エンジニアからCTOへ 2015-06-11 IVS CTO Night & Day
エンジニアからCTOへ 2015-06-11 IVS CTO Night & DayエンジニアからCTOへ 2015-06-11 IVS CTO Night & Day
エンジニアからCTOへ 2015-06-11 IVS CTO Night & Day
 
第4回concrete5京都勉強会 〜まだまだ遅くない!基礎からガッチリ使いこなそうconcrete5〜
第4回concrete5京都勉強会 〜まだまだ遅くない!基礎からガッチリ使いこなそうconcrete5〜第4回concrete5京都勉強会 〜まだまだ遅くない!基礎からガッチリ使いこなそうconcrete5〜
第4回concrete5京都勉強会 〜まだまだ遅くない!基礎からガッチリ使いこなそうconcrete5〜
 
Arduino を PHP で制御する
Arduino を PHP で制御するArduino を PHP で制御する
Arduino を PHP で制御する
 
勉強会 Cvml python基礎
勉強会 Cvml python基礎勉強会 Cvml python基礎
勉強会 Cvml python基礎
 

pecoを使おう