zsh别名扩展

Bry*_*ard 5 zsh zshrc

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

alias -g '...'='../..'
alias -g '....'='../../..'
Run Code Online (Sandbox Code Playgroud)

但是当我输入时,例如,cd .../some<tab>它不会扩展为cd .../somethingcd ../../something.因此,我经常不会使用这些方便的别名,因为它们与制表符完成不兼容.

fow*_*fow 10

我是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
Run Code Online (Sandbox Code Playgroud)


dog*_*ane 5

尝试查找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 
Run Code Online (Sandbox Code Playgroud)

  • 就此而言,您只需键入`...`并使用正常的`alias -g`别名按`Ctrl-X a`. (4认同)
  • @dogbane:这给了我zsh 4.3.10中的"没有这样的小部件`my-expand-abbrev'" (3认同)
  • 也许你错过了一些东西。我的完整工作设置在这里:https://github.com/ericboehs/dotfiles/blob/master/.zsh/abbreviations.zsh。这可能是扩展的globs。 (2认同)