Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: wanted: viins-mode and digit argument with a,i,A and such
- X-seq: zsh-users 3289
- From: Peter Stephenson <pws@xxxxxxxxxxxxxxxxxxxxxxxxx>
- To: zsh-users@xxxxxxxxxxxxxx (Zsh users list)
- Subject: Re: wanted: viins-mode and digit argument with a,i,A and such
- Date: Mon, 17 Jul 2000 14:02:21 +0100
- In-reply-to: "Your message of Mon, 17 Jul 2000 14:26:15 +0200." <20000717142615.A2063@xxxxxxxxxxxxxxxxxxxxxxxxxx>
- Mailing-list: contact zsh-users-help@xxxxxxxxxxxxxx; run by ezmlm
> hi all!
>
> when i use bindkey -e, i can insert one character 10 times with
> ESC 10 <character>.
>
> With vi one normally uses something like 10i<character>.
> This is not possible with ZSH ( bindkey -v set ).
> One real advantage of bindkey -e here.
> Has someone thought about inventing something like it?
If you are using 3.1, try a widget like
read-and-insert-char () {
local char i bound
read -k char
# Use padding trickery to add character multiple times.
# Expands to something like ${(l.10..j.):-}
# which means pad to ten characters using the fill character j, but
# with no parameter, so we end up with pure padding.
if [[ $char = . ]]; then bound=:; else bound=.; fi
eval LBUFFER="\"\${LBUFFER}\${(l.${NUMERIC:-1}.${bound}$char${bound}):-}\""
}
zle -N read-and-insert-char
bindkey -M vicmd '^xi' read-and-insert-char
Go to vi command mode, type a number, the key sequence bound to the widget,
then a character, and it will be inserted that many times.
If you want to insert a longer string that many times, you will need to
expand the `read -k char' to a loop which reads a lot of characters until
you get an escape. (It would be nice to have a minibuffer read for this
sort of thing.) Then you will need to turn the bit which adds to LBUFFER
into a proper loop --- straightforward, I just couldn't be bothered to do
it the long-winded way.
--
Peter Stephenson <pws@xxxxxxxxxxxxxxxxxxxxxxxxx>
Cambridge Silicon Radio, Unit 300, Science Park, Milton Road,
Cambridge, CB4 0XL, UK Tel: +44 (0)1223 392070
Messages sorted by:
Reverse Date,
Date,
Thread,
Author