From: "Thomas Köhler" <jean-luc@picard.franken.de>
To: zsh-users@sunsite.dk
Subject: Re: vim-a-like vi mode status bar
Date: Sat, 16 Feb 2002 18:48:05 +0100 [thread overview]
Message-ID: <20020216174804.GA11720@picard.franken.de> (raw)
In-Reply-To: <20020216172000.GA892@stu163.keble.ox.ac.uk>
[-- Attachment #1.1: Type: text/plain, Size: 988 bytes --]
Hi,
Ian Lynagh wrote [020216 18:28]:
> Hi all
>
> I have thought it would be nice to have a vim-a-like indicator of
> whether or not you are insert or command mode when using the vi line
> editting mode for a long time now. In a burst of enthusiasm I have put
> something together over the last couple of days (attached). However it's
> not quite as nice as it might have been and I have run into a few
> annoyances along the way.
Well, I use something similar. Of course, I have a multiline
prompt, so what I have here might work for you, but it might need
some adjustment - the escape sequences for moving the cursor
might not work for your type of terminal...
Ciao,
Thomas
--
Thomas Köhler Email: jean-luc@picard.franken.de | LCARS - Linux
<>< WWW: http://jeanluc-picard.de | for Computers
IRC: jeanluc | on All Real
PGP public key available from Homepage! | Starships
[-- Attachment #1.2: zshrc.showmode --]
[-- Type: text/plain, Size: 4947 bytes --]
# vi keybindings
bindkey -v
bindkey -M vicmd "^R" redo
bindkey -M vicmd "u" undo
bindkey -M vicmd "ga" what-cursor-position
unsetopt promptcr
redisplay() {
builtin zle .redisplay
( true ; show_mode "INSERT") &!
}
redisplay2() {
builtin zle .redisplay
(true ; show_mode "NORMAL") &!
}
zle -N redisplay
zle -N redisplay2
bindkey -M viins "^X^R" redisplay
bindkey -M vicmd "^X^R" redisplay2
screenclear () {
echo -n "\033[2J\033[400H"
builtin zle .redisplay
(true ; show_mode "INSERT") &!
}
zle -N screenclear
bindkey "\f" screenclear
screenclearx () {
repeat 2 print
local MYLINE="$LBUFFER$RBUFFER"
highlight $MYLINE
repeat 4 print
builtin zle redisplay
}
zle -N screenclearx
bindkey "^Xl" screenclearx
show_mode() {
local COL
local x
COL=$[COLUMNS-3]
COL=$[COL-$#1]
x=$(echo $PREBUFFER | wc -l )
x=$[x+1]
echo -n "^[7^[[$x;A^[[0;G"
echo -n ""
echo -n "^[[0;37;44m--$1--^[[0m"
echo -n "^[8"
}
zmodload zsh/parameter
### vi-add-eol (unbound) (A) (unbound)
### Move to the end of the line and enter insert mode.
vi-add-eol() {
show_mode "INSERT"
builtin zle .vi-add-eol
}
zle -N vi-add-eol
bindkey -M vicmd "A" vi-add-eol
### vi-add-next (unbound) (a) (unbound)
### Enter insert mode after the current cursor posi
### tion, without changing lines.
vi-add-next() {
show_mode "INSERT"
builtin zle .vi-add-next
# OLDLBUFFER=$LBUFFER
# OLDRBUFFER=$RBUFFER
# NNUMERIC=$NUMERIC
# bindkey -M viins "^[" vi-cmd-mode-a
}
zle -N vi-add-next
bindkey -M vicmd "a" vi-add-next
### vi-change (unbound) (c) (unbound)
### Read a movement command from the keyboard, and kill
### from the cursor position to the endpoint of the
### movement. Then enter insert mode. If the command
### is vi-change, change the current line.
vi-change() {
show_mode "INSERT"
builtin zle .vi-change
}
zle -N vi-change
bindkey -M vicmd "c" vi-change
### vi-change-eol (unbound) (C) (unbound)
### Kill to the end of the line and enter insert mode.
vi-change-eol() {
show_mode "INSERT"
builtin zle .vi-change-eol
}
zle -N vi-change-eol
bindkey -M vicmd "C" vi-change-eol
### vi-change-whole-line (unbound) (S) (unbound)
### Kill the current line and enter insert mode.
vi-change-whole-line() {
show_mode "INSERT"
builtin zle .vi-change-whole-line
}
zle -N vi-change-whole-line
bindkey -M vicmd "S" vi-change-whole-line
### vi-insert (unbound) (i) (unbound)
### Enter insert mode.
vi-insert() {
show_mode "INSERT"
builtin zle .vi-insert
}
zle -N vi-insert
bindkey -M vicmd "i" vi-insert
### vi-insert-bol (unbound) (I) (unbound)
### Move to the first non-blank character on the line
### and enter insert mode.
vi-insert-bol() {
show_mode "INSERT"
builtin zle .vi-insert-bol
}
zle -N vi-insert-bol
bindkey -M vicmd "I" vi-insert-bol
### vi-open-line-above (unbound) (O) (unbound)
### Open a line above the cursor and enter insert mode.
vi-open-line-above() {
show_mode "INSERT"
builtin zle .vi-open-line-above
}
zle -N vi-open-line-above
bindkey -M vicmd "O" vi-open-line-above
### vi-open-line-below (unbound) (o) (unbound)
### Open a line below the cursor and enter insert mode.
vi-open-line-below() {
show_mode "INSERT"
builtin zle .vi-open-line-below
}
zle -N vi-open-line-below
bindkey -M vicmd "o" vi-open-line-below
### vi-substitute (unbound) (s) (unbound)
### Substitute the next character(s).
vi-substitute() {
show_mode "INSERT"
builtin zle .vi-substitute
}
zle -N vi-substitute
bindkey -M vicmd "s" vi-substitute
### vi-replace (unbound) (R) (unbound)
### Enter overwrite mode.
###
vi-replace() {
show_mode "REPLACE"
builtin zle .vi-replace
}
zle -N vi-replace
bindkey -M vicmd "R" vi-replace
### vi-cmd-mode (^X^V) (unbound) (^[)
### Enter command mode; that is, select the `vicmd'
### keymap. Yes, this is bound by default in emacs
### mode.
vi-cmd-mode() {
show_mode "NORMAL"
builtin zle .vi-cmd-mode
}
zle -N vi-cmd-mode
bindkey -M viins "^[" vi-cmd-mode
### vi-oper-swap-case
### Read a movement command from the keyboard, and swap
### the case of all characters from the cursor position
### to the endpoint of the movement. If the movement
### command is vi-oper-swap-case, swap the case of all
### characters on the current line.
###
bindkey -M vicmd "g~" vi-oper-swap-case
[-- Attachment #2: Type: application/pgp-signature, Size: 232 bytes --]
next prev parent reply other threads:[~2002-02-16 17:48 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-02-16 17:20 Ian Lynagh
2002-02-16 17:48 ` Thomas Köhler [this message]
2002-02-16 20:05 ` Ian Lynagh
2002-02-17 18:57 ` Thomas Köhler
2002-02-20 22:12 ` Steve Talley
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=20020216174804.GA11720@picard.franken.de \
--to=jean-luc@picard.franken.de \
--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).