はじめまして!今年5月にJoinしたてながら、nanapi長老の座をゲットした萩谷です。以後よろしくおねがいします。
昨今CUI界隈ではインクリメンタルサーチの組み込みの盛り上がりがアツいですね。その中でも代表的なのが
これら3つじゃないでしょうか。それぞれ開発も活発ですし、それぞれの良いところがありますが、今回はgolangで実装されており、とても高速・快適なpecoの活用方法について紹介したいと思います!
準備
Macな方はhomebrewでインストールできます。
1 2 |
brew tap peco/peco brew install peco |
Macじゃなくてもgolangの実行ができるようにしておけば、
1 |
go get github.com/peco/peco/cmd/peco |
これでもOKです。どちらでも楽ちんですねー。
基本
ディレクトリ移動、gitのブランチ切り替え、コマンド履歴検索といったところは、使わないと導入した意味がないっていうくらい手放せないものです。コピペでさくっと導入しちゃいましょう!
このあたりが参考になります。
ghq / 履歴 / ブランチ切り替え / 便利pkill
http://k0kubun.hatenablog.com/entry/2014/07/06/033336
履歴 / ディレクトリ移動
http://shibayu36.hatenablog.com/entry/2014/06/27/223538
などなど紹介しきれませんが、色々探してみようと思った方へ、僭越ながら一つアドバイスをさせてください。pecoは実装こそ違うものの、ほとんどpercolと使い方が同じツールです。ですので、percolの活用方法はほぼそのままpecoの活用方法にもなるのです。
例えばcd (change directory)を便利に使いたい!と思ったら、以下のような検索の仕方がとても有効です。
google検索:pecoでcdを便利に
応用
いよいよ本題です。当方の環境はMac + iTerm2 + tmux + zshになっており、zshrcに導入することを想定しています。ご自分の環境への適用は適宜読みかえをお願いします。
1. CUI版Hoster
1 2 3 4 5 6 |
function change_hosts() { sudo -v && ls /path/to/sources/* | peco | xargs cat | sort | uniq | sudo tee /etc/hosts if [[ ! -z `cat /etc/hosts | grep remote-host-name` ]]; then networksetup -connectpppoeservice "remote-host" fi } |
この例では特定のホストを設定した場合にVPN接続するようにしています。更に複数選択するとマージするようにしています。
こういった手軽な拡張はシェルならではですね!
2. 普段は素のgit diffで充分。だけどたまにはリッチに比べたい
1 2 3 4 5 6 7 8 9 |
function peco-git-diff() { git rev-parse --git-dir >/dev/null 2>&1 if [[ $? == 0 ]]; then local target=$(git diff --stat $1 | peco | awk '{print $1}') if [[ -n $target ]]; then vimdiff <(git show $1:$target) $target fi fi } |
最初の git rev-parseでgit管理下のディレクトリかチェックしています。
Vimmerでfugitive.vimユーザーな方は、vimdiffの代わりに、vimにGdiffコマンドを流し込むのもアリですね!
3. 奥深いディレクトリに眠っている日本語名のファイルを探す
1 2 3 4 5 6 7 8 9 |
function peco-search-file() { ${1:=$(pwd)} local selected=$(find $1 -maxdepth 2 | _peco_single) if [[ -d $selected ]]; then peco-search-file $selected elif [[ -f $selected ]]; then cat $selected fi } |
これで再帰的にディレクトリを絞りこみながら目的のファイルを探すことができます!例では最終的にopenしていますが、cp/mv/rmするのに使ってもいいんじゃないでしょうか。
ですが、このままだと「日本語名の」というのは無理がありますね。これを使うためにはちょっとした準備が必要です。こちらを参考にmigemogrepをセットアップすると・・・
こうなります!!日本語変換なしで日本語の文字列を検索できているのがわかりますか?とはいえ検索ツール(matcher)の切り替えが若干面倒ではあるので、デフォルトmatcherの指定機能の実装が待たれますね〜。
おまけ. configを使い分けて使いやすく
おそらく裏ワザ的なtipsになると思います。
実現したい機能によっては複数選択したかったり、ひとつしか選択したくなかったりまちまちになると思います。
全部入りのconfigを作るのもアリですが、使いたい機能によって機能を限定したconfigを個別に用意するとさらに使いやすくなります。
たくさん選択したい場合
1 2 3 4 5 6 |
"Keymap": { "C-s": "peco.ToggleSelectionAndSelectNext" }, "Style": { "Selected": ["underline", "on_blue", "black"] } |
ポンポン選べて気持ち良いですね。
1行で充分な場合
1 2 3 4 5 |
"Keymap": { // none }, "Style": { "Selected": ["underline", "on_green", "black"] } |
こちらではC-sでの複数選択は効かなくなっています。機能をシンプルにしたい場合向けですね。
まとめ
いかがでしたか?とりあえずコピペするだけでも便利に使えると思います。
ですが!ちょっとだけシェルの知識が必要になってしまいますが、自分が使いやすいようにカスタマイズして、便利コマンドを量産することを強くオススメします!