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.
TL;DR:
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:
z
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.
Top comments (0)