zsh-users
 help / color / mirror / code / Atom feed
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


  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).