zshTop / zsh$'〜'http://dengaku.org/~naoki/zsh/FAQ-J/zshfaq03-j.html#l41 参照 \e をエスケープシーケンスとして扱うためのクォート。 `print '〜'` "$(print '〜')" 辺りで代用可能。 PS1に \e を中に含む変数を代入する場合は以下のコマンド展開の方が望ましい結果が得られる。 PS1=`print 〜` キーバインド一覧bindkey -L グローバルエイリアスalias -g G="| grep" $ ps aux G me # ↑ が ↓ のように解釈される $ ps aux | grep me G から始まる何かを補完したいときには失敗したり、 略語展開な補完 (abbreviation)http://homepage1.nifty.com/blankspace/zsh/zsh.html この辺参照。 やることとしては、以下な感じ。
# 単語(空白文字で区切られているもの)に対する補完 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 特定のファイルを補完対象にするzstyle ':completion:*:g++:*' file-patterns '*.(cpp|h):c++\ files *(-/):directories' .cpp, .h とディレクトリも補完対象にしている例。 特定のファイルを補完対象から外す# サフィックスが該当するファイルを外す fignore=(CVS .class) # ignored-patterns を使うと細かい制御が可能 zstyle ':completion:*:(all-|)files' ignored-patterns '(|*/)CVS' '*.class' zstyle ':completion:*:cd:*' ignored-patterns '(|*/)CVS' |