zsh の exntended_glob と HEAD^^^ を共存させる。
extended_glob すると ^ が特殊文字になって HEAD^^^ とかできなくなって UZEEE のでやってみた。
typeset -A abbreviations
abbreviations=(
"L" "| $PAGER"
"G" "| grep"
"HEAD^" "HEAD\\^"
"HEAD^^" "HEAD\\^\\^"
"HEAD^^^" "HEAD\\^\\^\\^"
"HEAD^^^^" "HEAD\\^\\^\\^\\^\\^"
"HEAD^^^^^" "HEAD\\^\\^\\^\\^\\^"
)
magic-abbrev-expand () {
local MATCH
LBUFFER=${LBUFFER%%(#m)[-_a-zA-Z0-9^]#}
LBUFFER+=${abbreviations[$MATCH]:-$MATCH}
}
magic-abbrev-expand-and-insert () {
magic-abbrev-expand
zle self-insert
}
magic-abbrev-expand-and-accept () {
magic-abbrev-expand
zle accept-line
}
no-magic-abbrev-expand () {
LBUFFER+=' '
}
zle -N magic-abbrev-expand
zle -N magic-abbrev-expand-and-insert
zle -N magic-abbrev-expand-and-accept
zle -N no-magic-abbrev-expand
bindkey "\r" magic-abbrev-expand-and-accept # M-x RET はできなくなる
bindkey "^J" accept-line # no magic
bindkey " " magic-abbrev-expand-and-insert
bindkey "." magic-abbrev-expand-and-insert
bindkey "^x " no-magic-abbrev-expandこうすると
git reset HEAD^ # までうって RET をおすと git reset HEAD\^ # に展開されて実行される git di HEAD^^^..HEAD^ # とうつと、 git di HEAD\^\^\^. git di HEAD\^\^\^..HEAD\^ # と展開されていく
git は引数に割とファイルとったりするので glob の機能自体は残しておきたいわけです!