From: Peter Stephenson <pws@cambridgesiliconradio.com>
To: zsh-users@sunsite.auc.dk (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 [thread overview]
Message-ID: <0FXU00G2VEVXZ5@la-la.cambridgesiliconradio.com> (raw)
In-Reply-To: "Your message of Mon, 17 Jul 2000 14:26:15 +0200." <20000717142615.A2063@linux-ws.kg-hittfeld.local>
> 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@cambridgesiliconradio.com>
Cambridge Silicon Radio, Unit 300, Science Park, Milton Road,
Cambridge, CB4 0XL, UK Tel: +44 (0)1223 392070
next prev parent reply other threads:[~2000-07-17 13:03 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2000-07-17 12:26 Matthias Kopfermann
2000-07-17 13:02 ` Peter Stephenson [this message]
2000-07-17 17:04 ` Bart Schaefer
2000-07-17 17:33 ` Peter Stephenson
2000-07-17 18:13 ` Bart Schaefer
2000-07-17 20:14 ` Thomas Köhler
[not found] <no.id>
2000-07-17 13:39 ` Matthias Kopfermann
2000-07-17 14:06 ` 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=0FXU00G2VEVXZ5@la-la.cambridgesiliconradio.com \
--to=pws@cambridgesiliconradio.com \
--cc=zsh-users@sunsite.auc.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).