#contents * $'〜' http://dengaku.org/~naoki/zsh/FAQ-J/zshfaq03-j.html#l41 参照~ \e をエスケープシーケンスとして扱うためのクォート。~ 3.1.4以降。~ (実は bash にもあった `print '〜'` "$(print '〜')" 辺りで代用可能。~ PS1に \e を中に含む変数を代入する場合は以下のコマンド展開の方が望ましい結果が得られる。~ (シングルクォートで括っていないだけ~ PS1=`print 〜` * キーバインド一覧 bindkey -L * グローバルエイリアス alias -g G="| grep" $ ps aux G me # ↑ が ↓ のように解釈される $ ps aux | grep me G から始まる何かを補完したいときには失敗したり、~ G そのものを入れたつもりでハマるので略語補完を使う方が幸せ。~ * 略語展開な補完 (abbreviation) http://homepage1.nifty.com/blankspace/zsh/zsh.html この辺参照。~ やることとしては、以下な感じ。~ 上記サイトと違って通常の補完と略語展開をセットでやってたり、~ 空白区切りの補完とパイプな補完(|g みたいな)を分けてたり。~ - 略語連想配列の作成 typeset -A abbrev - 略語展開関数の作成~ $LBUFFER の変更をする - 略語展開 || 通常の補完 な関数の作成 - zle -N - キーバインド割り当て # 単語(空白文字で区切られているもの)に対する補完 typeset -A word_abbrev word_abbrev=( "tar" "czvf" ) # パイプに対する補完 typeset -A pipe_abbrev pipe_abbrev=( "l" "$PAGER" "g" "grep" "s" "sort" "w" "wc" "h" "head" "t" "tail" ) # 単語略語展開 expand-word-abbrev() { local left right abbrev # 最後の単語 right=$(echo -nE "$LBUFFER" | sed -e 's/.*[[:space:]]\([^[:space:]]*\)$/\1/') abbrev=$word_abbrev[$right] if [ -z "$abbrev" ] ; then return 1 fi # 残り left=$(echo -nE "$LBUFFER" | sed -e 's/[^[:space:]]*$//') LBUFFER=$left$abbrev" " return 0 } # パイプ略語展開 expand-pipe-abbrev() { local left right abbrev # 最後の | 以降を取得 right=$(echo -nE "$LBUFFER" | sed -e 's/.*|\([^|]*\)$/\1/') abbrev=$pipe_abbrev[$right] if [ -z "$abbrev" ] ; then return 1 fi # 残り left=$(echo -nE "$LBUFFER" | sed -e 's/[^|]*$//') LBUFFER=$left" "$abbrev" " return 0 } # 略語展開 || complete-word expand-my-abbrev-or-complete() { expand-pipe-abbrev || expand-word-abbrev || zle complete-word } zle -N expand-my-abbrev-or-complete bindkey "^I" expand-my-abbrev-or-complete