Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Multi-word aliases?



On Tue, 04 Nov 2014 11:43:39 +0100
Dominik Vogt <vogt@xxxxxxxxxxxxxxxxxx> wrote:
> Just to better understand the situation, is there any technical
> reason to limit the scope of aliases to the first word of the
> command line?  After all, zsh already has to look everywhere for
> global aliases.

Yes, the space triggers the expansion.  Then the resulting token is
passed up to the lexical analyser.  There's no obvious way of having it
expand multi-word aliases without it not being able to parse token by
token. This rather destroys the shell's ability to parse at all.

> Btw., there's no simple way to do regexp search and replace on
> command lines like
> 
>   s/^(git\w.*\wrebase\w)(.*)/\1 --keep-empty\2/
> 
> or is there? (\w is an ad-hoc expression for a token boundary)

I'm not sure if you mean "on a command line passed to a script" or "on a
command line I'm editing".  In context, I'm assuming the former.  In
that case you can do stuff like

  integer index=${argv[(I)rebase]}
  if (( index )); then
    argv[index]=(rebase --keep-empty)
  fi

The way I've done it it's been careful about keeping command line
elements separate; there's no problem with word-splitting.

Tested, for once.  You could do that in a git wrapper, but you still
have the problem that the "rebase" could be some later argument
along the command line (or even an argument to a global option).

pws



Messages sorted by: Reverse Date, Date, Thread, Author