タブ補完中にグローバルエイリアスを展開するようにzshを構成することは可能ですか?たとえば、私は一般的なエイリアスを持っています:
alias -g '...'='../..'
alias -g '....'='../../..'
しかし、たとえば入力すると、またはcd .../some<tab>
に展開されません。したがって、これらの便利なエイリアスはタブ補完と互換性がないため、頻繁には使用しません。cd .../something
cd ../../something
私はMikaelMagnussonのユーザーですrationalise-dot
。私のzshrcから:
# This was written entirely by Mikael Magnusson (Mikachu)
# Basically type '...' to get '../..' with successive .'s adding /..
function rationalise-dot {
local MATCH # keep the regex match from leaking to the environment
if [[ $LBUFFER =~ '(^|/| | |'$'\n''|\||;|&)\.\.$' ]]; then
LBUFFER+=/
zle self-insert
zle self-insert
else
zle self-insert
fi
}
zle -N rationalise-dot
bindkey . rationalise-dot
# without this, typing a . aborts incremental history search
bindkey -M isearch . self-insert
zshの略語を調べてみてください。スペースなどの魔法のキーを押すと、自動的に完全な形式に置き換えられる「略語」を入力できます。...<SPACE>
したがって、に変更するものを作成できます../..
。
たとえば、これはプロファイルに必要なものです。
typeset -A abbrevs
abbrevs=(
"..." "../.."
"...." "../../.."
)
#create aliases for the abbrevs too
for abbr in ${(k)abbrevs}; do
alias -g $abbr="${abbrevs[$abbr]}"
done
my-expand-abbrev() {
local MATCH
LBUFFER=${LBUFFER%%(#m)[_a-zA-Z0-9]#}
LBUFFER+=${abbrevs[$MATCH]:-$MATCH}
zle self-insert
}
bindkey " " my-expand-abbrev