ソフトウェア/peco のバックアップ(No.1)

更新


公開メモ

概要

peco とは linux シェル上でコマンド引数を入力する際にリストから選択することを可能にするプログラムで、最近流行っているそうです。

特に zsh + peco の組み合わせは強力で、いろんな使い方が方々で紹介されています。例えば http://qiita.com/tags/peco

このページでは個人的に peco を導入して使ってみた様子をメモします。

インストール

個人用にインストールするだけなら、Qiita: 例えば、pecoをビルドしない を参考にしてバイナリを落としてくれば簡単です。

\~/bin へのパスが通してあることを前提にすれば、

LANG:console
$ wget https://github.com/peco/peco/releases/download/v0.2.10/peco_linux_amd64.tar.gz
 -> peco_linux_amd64.tar.gz
$ tar fxz peco_linux_amd64.tar.gz
$ ls peco_linux_amd64
 Changes  README.md  peco
$ cp peco_linux_amd64/peco ~/bin
$ rm -r peco_linux_amd64 peco_linux_amd64.tar.gz
$ peco
 You must supply something to work with via filename or stdin

これだけでOKです。

git 向け

zsh + peco + git の記事はあちこちで見ますが、bash だと alias -g が効かないため、使えない Tips が多くて悔しい思いをします。

そこでいろいろ試したところ、bash の場合には bash の alias ではなく、git の alias に登録しておくと使いやすそうです。

実のところ、.gitconfig の [alias] セクションで定義する alias には ! で始まる任意のシェルコマンドを書けるので、peco と組み合わせればほぼ何でもできます。

[alias]
  # SYNTAX: git d
  #
  # 履歴一覧を表示して選択した履歴との diff を取る
  # 初期状態のまま Enter を押せば単に git diff と打ったのと同様に HEAD と working copy との間の差分をとる
  # 履歴を1つ選んで Enter を押せば、その履歴と working copy との差分を取る
  # Ctrl+space で2つ選べば、その間の差分を取る
  #
  d = !git diff --minimal --ignore-all-space `git log --oneline --branches | peco | ruby -e 'STDIN.readlines.reverse.each{|s| puts s[0..6]}'`
  # SYNTAX: git add-peco
  #
  # git add するファイルを peco で選択する
  add-peco = "!if [ \"`git status -s`\" != \"\" ]; then echo git add `git status -s | peco | set -e 's/.* //'`; fi"

このように git の alias を駆使すれば、 シェルに1文字エイリアスを定義するよりも環境を汚さずに済み、またコマンド毎に細かい指定もできるため、zsh をお使いの場合にも、 むやみに alias -g を定義するより良いことも多いかもしれません。

一般コマンド

peco-find

some-editor `peco-find`

などとして、プロジェクト内の任意のファイルを簡単に開けます。

function peco-find() {
  find . | peco
}

peco-kill

kill するプロセスを選択できます。

function peco-kill() {
 kill `ps aux | peco | awk '{print $2}'`
}

function peco-kill-kill() {
 kill -KILL `ps aux | peco | awk '{print $2}'`
}

peco-history

シェル履歴を呼び出します。

こちらのものが使いやすそう。

http://qiita.com/omega999/items/8717c1b9d8bc10596d67

Ctrl-r に割り当てると便利です。

コメント・質問





Counter: 4962 (from 2010/06/03), today: 4, yesterday: 0