TIL: How my complicated alias works

nflamel profile image Fran C. ・2 min read

This post comes from this comment: https://dev.to/nflamel/comment/11o72. You can read the whole thread here:

I think that my 2 favortites and the 2 I use more are, no doubt:

alias e='${(z)VISUAL:-${(z)EDITOR}}'
alias g='git'

I've had this alias on my dot-files for some time. I use it to open my editor of choice (neovim).

alias e='${(z)VISUAL:-${(z)EDITOR}}'

I didn't know what it was exactly doing until recently. I've had it copy/pasted around my dot-files many times.

EDIT: I mean... I know I always use e to open nvim. What I didn't know was why was I using such a complex alias to do it.


It uses $VISUAL or $EDITOR and makes sure that it properly handles any extra parameter given to it. So something line vim -a -b -c works.

Detailed explanation

Got it from here https://github.com/sorin-ionescu/prezto/blob/f4ca9ebfc913453f98ba6912a8c42684fd742cc1/modules/utility/init.zsh#L55

What it does If I'm not mistaken is to alias e to either the value of $VISUAL or $EDITOR. But to only do that it would be enough with:

alias e='${VISUAL:-${EDITOR}}`

There's also this (z) that I just learned on ZSH is an expansion flag. Looking into ZSH manual it says:


    Split the result of the expansion into words using shell parsing to find
    the words, i.e. taking into account any quoting in the value. Comments are
    not treated specially but as ordinary strings, similar to interactive
    shells with the INTERACTIVE_COMMENTS option unset (however, see the Z flag
    below for related options)

    Note that this is done very late, even later than the ‘(s)’ flag. So to
    access single words in the result use nested expansions as in
    ‘${${(z)foo}[2]}’. Likewise, to remove the quotes in the resulting words
    use ‘${(Q)${(z)foo}}’.

but I still didn't know what it means... so I tried to do:

VISUAL='nvim -v' # This just writes the nvim version
alias e='${VISUAL:-${EDITOR}}'

If I then I've tried

$ e
zsh: command not found: nvim -v

That doesn't happen if I try with (z) flag on the expansion alias e='${(z)VISUAL:-${(z)EDITOR}}'.

Thanks to https://dev.to/nocnica for asking the right question and for suggesting that I extracted the comment into this post.

Posted on by:

nflamel profile

Fran C.


I break code for a living... wait no, I fix it, most of the times. Well, sometimes.Yeah, I break code for a living.


markdown guide