zsh 别名扩展

zsh 别名扩展

是否可以配置 zsh 在制表符完成期间扩展全局别名?例如,我有常见的别名:

alias -g '...'='../..'
alias -g '....'='../../..'

但是当我输入时,cd .../some<tab>它不会扩展为cd .../somethingor cd ../../something。因此,我经常不会使用这些方便的别名,因为我无法在我想去的地方按 Tab 键完成。

答案1

尝试向上查找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
}

zle -N my-expand-abbrev    
bindkey " " my-expand-abbrev 
bindkey -M isearch " " self-insert

答案2

我有一个自定义 ZLE 小部件为此,只需将其放在$fpath.然后你就可以配置它这边走

相关内容