の続き。ちょいちょいスクリプトをカスタマイズしていたので。
ところで最近の開発はコードを書いているときだいたい開発中アプリケーションのトップディレクトリにいて、そこでいつもいくつか決まったコマンドを実行する、ということがよくあります。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の選択インターフェースが起動して、アプリごとに必要なコマンドが選択肢に表示されるので、あとはそこから選べばよくなりました。
