zsh别名扩展
是否可以配置zsh在选项卡完成期间扩展全局别名?例如,我有共同的别名:zsh别名扩展
alias -g '...'='../..'
alias -g '....'='../../..'
,但是当我输入,例如,cd .../some<tab>
也不会扩大到cd .../something
或cd ../../something
。因此,我经常不会使用这些方便的别名,因为它们与制表符完成不兼容。
我的的Mikael马格努松的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
对于这个问题,你只需输入`...`,然后按下`Ctrl-X a`,只使用普通的`alias -g`别名。 – 2011-01-20 01:01:43
@Dennis:可以`
查看`man zshcompsys`并搜索“_expand_alias”。对不起,我没有机会深入学习zsh完成。你也可以试试unix.stackexchange.com。 – 2011-01-19 20:22:03