是否可以将 zsh 配置为在选项卡完成期间扩展全局别名?例如,我有常见的别名:
alias -g '...'='../..'
alias -g '....'='../../..'
但是,例如,当我键入时,cd .../some<tab>
它不会扩展为cd .../something
or cd ../../something
。因此,我经常不会使用这些方便的别名,因为它们与制表符补全不兼容。
我是 Mikael Magnusson 的用户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