From: Bart Schaefer <schaefer@brasslantern.com>
To: zsh-users@sunsite.dk
Subject: Re: alias vl="vi !$"
Date: Thu, 11 Mar 2004 17:17:35 +0000 [thread overview]
Message-ID: <1040311171735.ZM20352@candle.brasslantern.com> (raw)
In-Reply-To: <4im0509toihq2ef1vlnnid6t93j90f6gor@4ax.com>
In-Reply-To: =?iso-8859-1?Q?=3C20040311125558=2EGA24218=40picard=2Efranken?= =?iso-8859-1?Q?=2Ede=3E?= =?iso-8859-1?Q?Comments=3A_In_reply_to__Thomas_K=F6hler_=3Cjean-luc=40pic?= =?iso-8859-1?Q?ard=2Efranken=2Ede=3E?= =?iso-8859-1?Q?________=22Re=3A_alias_vl=3D=22vi_!$=22=22_=28Mar_11=2C__1?= =?iso-8859-1?Q?=3A55pm=29?=
In-Reply-To: <svp0509rfu4iecet83auc9pel2i9n4mi9c@4ax.com>
On Mar 11, 12:26pm, zzapper wrote:
> Subject: Re: alias vl="vi !$"
>
> On Thu, 11 Mar 2004 17:10:03 +0800, James Devenish
> >on Thu, Mar 11, 2004 at 08:59:16AM +0000, zzapper wrote:
> >> alias vl="vi !$" where !$ is the command line "last parameter"
> >
> >Make your own 'function' named `vl`?
> >
> Do I have access to the positional parameters of the previous command
> line /history from inside a function?
This brings up an interesting point.
On the command line, $_ is the last word of the previous command, very
much like !$ is. (In the external process environment, $_ is the path
name of the currently executing command.)
Inside a function, however, $_ has already been changed to be the last
word of the _currently executing_ command, the same as as $argv[-1].
Which is not really all that useful, though maybe more useful than if
it had been changed to the path name of zsh or some such.
I'm usually a stickler for backwards compatibility, but does anyone
think anything would break if the changing of $_ were delayed until
after shell functions have been called, so that it would remain the
last word of the _previous_ command?
On Mar 11, 1:55pm, Thomas Köhler wrote:
>
> accept-line-or-empty-cmd() {
> if [ "$LBUFFER$RBUFFER" = vl ] ; then
> LBUFFER="vi !$"
> RBUFFER=""
> fi
> builtin zle .accept-line
> }
Cute, but unecessarily complicated:
if [[ $BUFFER = vl ]]; then BUFFER='vi !$'; fi
It also doesn't really work like an alias. Consider (in csh) that
vl foo
would become
vi !$ foo
whereas your example above would grumble about vl not found.
On Mar 11, 1:23pm, zzapper wrote:
>
> Tejmo emailed me this solution which works!!
>
> vl () {
> gvim.exe $(history -1 | sed "s/.* //g")
> }
That's the right idea, but it's a lot of processes for something you could
do entirely in zsh.
vl () {
zmodload -i zsh/parameter # Just in case
vi "${${(z)history[${${(@kno)history}[-1]}]}[-1]}" "$@"
}
I'm tempted to just leave that unexplained, but I wont't.
${(@kno)history} history numbers in ascending order (note 1)
${${...}[-1]} last element (largest histno) (note 2)
${(z)history[...]} corresponding history entry, split to words
${${...}[-1]} last element (last word of last history entry)
Note 1: The @ is only necessary because the whole thing is inside the
square brackets of ${history[...]}, which forces string context. Thus
the @ converts back to array context.
Note 2: I'd have used ${${(@knO)history}[1]} except that's affected by
the KSH_ARRAYS option. Negative subscripting isn't.
next prev parent reply other threads:[~2004-03-11 17:18 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-03-11 8:59 zzapper
2004-03-11 9:10 ` James Devenish
2004-03-11 12:26 ` zzapper
2004-03-11 12:33 ` Peter Stephenson
2004-03-11 12:40 ` zzapper
2004-03-11 12:55 ` Thomas Köhler
2004-03-11 13:23 ` zzapper
2004-03-11 17:17 ` Bart Schaefer [this message]
2004-03-11 17:58 ` $_ and compatibility Danek Duvall
2004-03-11 19:05 ` alias vl="vi !$" Wayne Davison
2004-03-11 20:13 ` zzapper
2004-03-11 23:45 ` Thorsten Kampe
2004-03-14 16:27 ` Peter Stephenson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1040311171735.ZM20352@candle.brasslantern.com \
--to=schaefer@brasslantern.com \
--cc=zsh-users@sunsite.dk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).