pecoを使おう

60
pecoを使おう 2014/11/30 三宅 英明(mollifier)

Upload: hideaki-miyake

Post on 14-Jul-2015

636 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: pecoを使おう

pecoを使おう2014/11/30

三宅 英明(mollifier)

Page 2: pecoを使おう

自己紹介

名前: 三宅 英明

Twitter: @mollifier

はてなID: mollifier

神戸のプログラマ

Page 3: pecoを使おう

好きなもの

zsh

vim

vimperator

Page 4: pecoを使おう

ブログとか

はてなブログ

http://mollifier.hatenablog.com/

Twitter

http://twitter.com/mollifier

Qiita

http://qiita.com/mollifier

Page 5: pecoを使おう

pecoを使おうpecoとは

pecoのインストール

pecoの基本

pecoで使う関数を作る

Page 6: pecoを使おう

pecoを使おうpecoとは

pecoのインストール

pecoの基本

pecoで使う関数を作る

Page 7: pecoを使おう

pecoとはインクリメンタルに絞り込んで、候補から選んでなんかするやつ

Page 8: pecoを使おう

pecoとは言葉では説明しにくい

Page 9: pecoを使おう

pecoとは典型的には、コマンドライン履歴から選んで、それを実行する

Page 10: pecoを使おう

pecoとは今年はやった

Page 11: pecoを使おう

pecoとはAnything風インタフェースとか呼ばれることもある

Page 12: pecoを使おう

pecoとはAnything風インタフェースというのは、もともとEmacsのやつ

pecoもそれに似てる

Page 13: pecoを使おう

pecoとは似てるけど、たぶん元のEmacsのやつとはちょっと違う

なので、「pecoはAnythingですー」とか適当に言うと、たぶんEmacs原理主義の人に怒られる

気をつけたほうがいい

Page 14: pecoを使おう

pecoとは使ってみないとよく分からない

使ってみましょう

Page 15: pecoを使おう

pecoを使おうpecoとは

pecoのインストール

pecoの基本

pecoで使う関数を作る

Page 16: pecoを使おう

pecoのインストールhttps://github.com/peco/peco/releasesにバイナリがあるので、ダウンロードして好きな場所に置く

実行パーミッションを付ける

Page 17: pecoを使おう

pecoのインストール安定したバージョンをインストールできる

たぶん一番安心して使える方法

バージョンアップのときに手動でダウンロードしないといけないのが欠点

Page 18: pecoを使おう

pecoのインストールMacを使っている場合はHomebrewでもインストールできる

% brew tap peco/peco% brew install peco

Page 19: pecoを使おう

pecoのインストール最新版とは限らない。若干バージョンが古いこともある

更新はbrew update pecoでできる。楽

Macでしかできない

Macの人にはわりとおすすめ

Page 20: pecoを使おう

pecoのインストールpecoはGoで実装されている

Goのパッケージシステムを使ってもインストールできる

% go getとかする

Page 21: pecoを使おう

pecoのインストールソースからコンパイルする

Goの開発環境をインストールしないといけない

たぶん、タグが付けられた安定版とは限らない

単に使いたいだけの人にとっては、ちょっとやりすぎ

Page 22: pecoを使おう

pecoのインストールMacの人はbrew

それ以外の人はバイナリを手動でダウンロード

Page 23: pecoを使おう

pecoを使おうpecoとは

pecoのインストール

pecoの基本

pecoで使う関数を作る

Page 24: pecoを使おう

pecoの基本とりあえずpecoを使ってみる

Page 25: pecoを使おう

pecoの基本

% cat /etc/passwd | peco

Page 26: pecoを使おう

pecoの基本要するに絞り込んで出力してるだけ

絞り込むときにインクリメンタルに絞り込める

grepを手動でやってる感じ

Page 27: pecoを使おう

pecoの基本動作自体は非常に単純

peco単体では役に立たない

Page 28: pecoを使おう

pecoの基本たぶん意図的に単純にしてる

単純であるがゆえに、他のコマンドと組み合わせやすい

cutとかsedとかawkとか

複数の候補から選ばせるときに、「選ばせる」という操作だけをpecoに任せる感じ

Page 29: pecoを使おう

pecoを使おうpecoとは

pecoのインストール

pecoの基本

pecoで使う関数を作る

Page 30: pecoを使おう

pecoで使う関数を作る入力をpecoを絞り込んで出力するだけのツール

他と組み合わせて使う

「他」の部分を作ってみましょう

Page 31: pecoを使おう

pecoで使う関数を作る入力をpecoを絞り込んで出力するだけのツール

まず「入力」が必要

pecoの出力を「どうするか」という処理も必要

Page 32: pecoを使おう

pecoで使う関数を作る典型的な例

「入力」 = コマンドライン履歴

「どうするか」 = コマンドとみなしてそのまま実行する

Page 33: pecoを使おう

pecoで使う関数を作る雰囲気でいうとこんな感じ

# コマンドライン履歴をpecoで絞り込む# その結果を一旦変数に入れるcmd=$(history | peco)# それをそのまま実行するeval "$cmd"

Page 34: pecoを使おう

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

Page 35: pecoを使おう

pecoで使う関数を作る% ehとか打たないとだめで、なんかおしゃれじゃない

特に、いちいちEnterを押さないといけないところがめんどう

こいつをCtrl+rみたいなキーバインドで実行したい

Page 36: pecoを使おう

pecoで使う関数を作るCtrl+x Ctrl+rで実行する例何かのキーバインドで関数を呼び出すときはこう書く

function peco-execute-history() { # この中に処理を書く}zle -N peco-execute-historybindkey '^x^r' peco-execute-history

Page 37: pecoを使おう

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-historybindkey '^x^r' peco-execute-history

Page 38: pecoを使おう

pecoで使う関数を作るBUFFER=”$item”で、今のコマンドラインの内容を置き換える

zle accept-lineでコマンドラインを実行する。つまりEnterを押したのと同じ

Page 39: pecoを使おう

pecoで使う関数を作る注意としては、BUFFER=”$item”というのはこの形の書き方のときしか使えない

function peco-execute-history() { # この中に処理を書く}zle -N peco-execute-historybindkey '^x^r' peco-execute-history

Page 40: pecoを使おう

pecoで使う関数を作るzle -Nとかいうのは、コマンドラインを操作する処理を自分で作っているイメージ

「コマンドラインを操作する処理」というのは、Ctrl+fで右に動く、とかそういうの

zshではそういうのを自分で作れる

Page 41: pecoを使おう

pecoで使う関数を作るさらにその中では現在のコマンドラインとかを変更できる

BUFFERは現在のコマンドラインの内容を表す変数で、読み書き両方可能

こいつに代入して、実行してる

Page 42: pecoを使おう

pecoで使う関数を作る「手でコマンドラインを入力して」「Enterを押す」という操作をzshのシェルスクリプトから操作できる

peco自体は他のシェルでも使えるけど、zshはこのへんが柔軟なのでpecoと組み合わせて使いやすい

Page 43: 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-historybindkey '^x^p' peco-put-history

Page 44: pecoを使おう

pecoで使う関数を作るさっきのzle accept-line(Enterを押す)をなくしただけ

これも便利

Page 45: pecoを使おう

ちょっと余談

「履歴から選んで実行する」はCtrl+x Ctrl+r

「履歴から選んでコマンドラインに挿入する」はCtrl+x Ctrl+p

別のキーバインドに割り当ててる

Page 46: pecoを使おう

ちょっと余談

本当は表示される候補を見ながら「すぐ実行するのか」「コマンドラインに挿入するのか」を選びたい

Page 47: pecoを使おう

ちょっと余談

Ctrl+x Ctrl+rで起動

すぐに実行したいときはEnterで決定

コマンドラインに挿入したいときはCtrl+oで決定

とか

Page 48: pecoを使おう

ちょっと余談

すぐに実行すればよいのか、コマンドラインに挿入したいのか(つまり、ちょっと変更したいのか)は、候補を見ないとよく分からない

Page 49: pecoを使おう

ちょっと余談

pecoの場合は

「1. 候補一覧を作る」

「2. 候補を選ぶ」

「3. 選んだ候補に対して動作を行う」

の3つが完全に分かれてる

Page 50: pecoを使おう

ちょっと余談

選んだ結果を文字列として出力してるだけ

「それに対してどういう動作を行うか」という情報はpecoからは送れない

Page 51: pecoを使おう

ちょっと余談

(確か)EmacsのAnythingはこのへんがちゃんとしてる

さっき言った3つが分かれていないから

「何を選んだのか」と「どういう動作を行いたいか」の両方が次に伝わっている

Page 52: pecoを使おう

ちょっと余談

でもpecoでは分かれているから、他と組み合わせるのが簡単

peco以外の部分は一般的なシェルスクリプトで書ける

Page 53: pecoを使おう

ちょっと余談

どっちが良いかは一概に言えない

でも、pecoの方がシンプルでよさそう

Page 54: pecoを使おう

ちょっと余談

余談終わり

Page 55: pecoを使おう

pecoで使う関数を作るここまででできたこと

「履歴から選んで実行する」

「履歴から選んでコマンドラインに挿入する」

Page 56: pecoを使おう

pecoで使う関数を作る他には?

もちろん工夫次第でいろいろできる

Page 57: pecoを使おう

pecoで使う関数を作る工夫次第?

工夫次第 = シェルスクリプトでがんばれば

がんばりたくない

Page 58: pecoを使おう

pecoで使う関数を作るシェルスクリプトが苦手な人はどうしたらええの?

そういう人向けのやつがあります

Page 59: pecoを使おう

pecoで使う関数を作る続きは次の発表で

Page 60: pecoを使おう

pecoを使おうありがとうございました