Search code examples
zshzshrc

zsh alias expansion


Is it possible to configure zsh to expand global aliases during tab completion? For example, I have the common aliases:

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

but when I type, for example, cd .../some<tab> it won't expand to cd .../something or cd ../../something. Consequently, I frequently won't use these handy aliases because they are incompatible with tab completion.


Solution

  • I'm a user of Mikael Magnusson's rationalise-dot. From my 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