pecoでカレントディレクトリごとによく使うコマンドを呼び出せるようにする
の続き。ちょいちょいスクリプトをカスタマイズしていたので。
ところで最近の開発はコードを書いているときだいたい開発中アプリケーションのトップディレクトリにいて、そこでいつもいくつか決まったコマンドを実行する、ということがよくあります。grunt
とかcomposer install
とかphp vendor/bin/phpunit
とか。
私はPHPをよく書くのでcomposer install
などは手に馴染んでいて入力するのに困ったりしないのですが、たまにRubyのプロジェクトをいじるときBundlerの使い方を忘れていてbundle install --path=vendor/bundle --binstubs=vendor/bin
とかを毎回、Gistにメモっておいたスニペットから引っ張ってきて入力してたりしました。
アプリケーションごとのスニペットファイル
そこでpecoをランチャーのようにして使うで書いたスクリプトをちょっと拡張して、カレントディレクトリに.snippets
ファイルをおいておくと、そこからもスニペットを取得するようにしました。
# snippets function peco-snippets() { local line local snippet local cwd local local_snippet if [ ! -e "~/.snippets" ]; then echo "~/.snippets is not found." >&2 return 1 fi # Get snippets in the current directory if it exists. cwd=`pwd` if [ -e "$cwd/.snippets" ]; then local_snippet="$cwd/.snippets" else local_snippet="" fi line=$(cat $local_snippet ~/.snippets | grep -v "^\s*#" | grep -v '^\s*$' | peco --query "$LBUFFER") if [ -z "$line" ]; then return 1 fi snippet=$(echo "$line" | sed "s/^[ |\*]*\[[^]]*\] *//g") if [ -z "$snippet" ]; then return 1 fi BUFFER="$snippet" zle clear-screen } zle -N peco-snippets bindkey '^x^x' peco-snippets
忘れやすいコマンドなどは.snippets
ファイルを以下のように記述しておけば、
EArray (https://github.com/kohkimakimoto/EArray) * [phpunit test] php vendor/bin/phpunit * [fix code] php vendor/bin/php-cs-fixer fix src * [composer] composer update
cmd-x+cmd-x
のショートカットでpecoの選択インターフェースが起動して、アプリごとに必要なコマンドが選択肢に表示されるので、あとはそこから選べばよくなりました。