To enable vi-mode editing, set the resource startMode to "vi", "Vi" or
"VI". If this is not set, the widget will behave in normal emacs mode.

Key bindings for Vi-Mode:

Ctrl<Key>T:			transpose-characters()
Ctrl<Key>P:			form-paragraph()
Ctrl<Key>L:			redraw-screen()
Ctrl<Key>F:			next-page()
Ctrl<Key>B:			previous-page()
Ctrl<Key>U:			previous-half-page()
Ctrl<Key>D:			next-half-page()
Ctrl<Key>Y:			scroll-one-line-down()
Ctrl<Key>E:			scroll-one-line-up()
Ctrl<Key>H:			vi-backward-character()
:<Key>\",:<Key>0:		select-buffer(0)
:<Key>\",!:<Key>a:		select-buffer(2)
:<Key>\",!:<Key>b:		select-buffer(3)
:<Key>\",!:<Key>c:		select-buffer(4)
:<Key>\",!:<Key>d:		select-buffer(5)
:<Key>\",!:<Key>e:		select-buffer(6)
:<Key>\",!:<Key>f:		select-buffer(7)
:<Key>\\:,!:<Key>r:		insert-file()
:<Key>\\:,!:<Key>w:		write-file()
!:<Key>z,<Key>Return:		redraw-screen-and-top()
!:<Key>z,:<Key>\.:		redraw-screen-and-center()
!:<Key>z,<Key>\-:		redraw-screen-and-bottom()
:<Key>\.:			dot-func()
!:<Key>y:			set-yank()
!:<Key>d:			set-delete()
!:<Key>c:			set-change()
!:<Key>Y:			yank-line()
!:<Key>D:			set-delete() vi-end-of-line()
!:<Key>C:			set-change() vi-end-of-line()
!:<Key>e:			vi-end-word()
!:<Key>E:			vi-end-word()
!:<Key>w:			vi-forward-word()
!:<Key>W:			vi-forward-word()
!:<Key>b:			vi-backward-word()
!:<Key>B:			vi-backward-word()
!:<Key>\}:			vi-forward-paragraph()
!:<Key>\{:			vi-backward-paragraph()
<Key>BackSpace:			vi-backward-character()
!:<Key>h:			vi-backward-character()
!:<Key>l:			vi-forward-character()
!<Key>space:			vi-forward-character()
!:<Key>j:			vi-next-line()
!:<Key>k:			vi-previous-line()
:<Key>\$:			vi-end-of-line()
!:<Key>g:			vi-beginning-of-file()
!:<Key>G:			vi-line-in-file()
!:<Key>s:			set-change() vi-forward-character()
!:<Key>S:			change-line()
!:<Key>r:			insert-mode(1)
!:<Key>R:			insert-mode(INF)
!:<Key>i:			insert-mode(0)
!:<Key>I:			start-line-insert-mode(0)
!:<Key>a:			insert-mode(0)
!:<Key>A:			end-line-insert-mode(0)
!:<Key>o:			open-next-line(0)
!:<Key>O:			open-previous-line(0)
!:<Key>x:			set-delete() vi-forward-character()
!:<Key>X:			set-delete() vi-backward-character()
:<Key>\?:			search(backward)
:<Key>\/:			search(forward)
!:<Key>f:			find-mode(RIGHT, TRUE)
!:<Key>F:			find-mode(LEFT, TRUE)
!:<Key>t:			find-mode(RIGHT, FALSE)
!:<Key>T:			find-mode(LEFT, FALSE)
!:<Key>u:			undo-func()
!:<Key>p:			insert-chosen-selection-after()
!:<Key>P:			insert-chosen-selection-before()
!:<Key>J:			join-line()
:<Key>0:			enter-digit(0)
!:<Key>1:			enter-digit(1)
!:<Key>2:			enter-digit(2)
!:<Key>3:			enter-digit(3)
!:<Key>4:			enter-digit(4)
!:<Key>5:			enter-digit(5)
!:<Key>6:			enter-digit(6)
!:<Key>7:			enter-digit(7)
!:<Key>8:			enter-digit(8)
!:<Key>9:			enter-digit(9)
<Key>Escape:			null-action(RingBell)
<Key>Right:			vi-forward-character()
<Key>Left:			vi-backward-character()
<Key>Down:			vi-next-line()
<Key>Up:			vi-previous-line()
<Key>Delete:			kill-selection()
<Key>Linefeed:			vi-next-line()
<Key>Return:			vi-next-line-word()
<Key>\+:			vi-next-line-word()
<Key>\-:			vi-previous-line-word()
<Key>:				null-action(RingBell)
<FocusIn>:			focus-in()
<FocusOut>:			focus-out()
<Btn1Down>:			select-start()
<Btn1Motion>:			extend-adjust()
<Btn1Up>:			extend-end(PRIMARY, CUT_BUFFER0)
<Btn2Down>:			insert-selection(PRIMARY, CUT_BUFFER0)
<Btn3Down>:			extend-start()
<Btn3Motion>:			extend-adjust()
<Btn3Up>:			extend-end(PRIMARY, CUT_BUFFER0)


In Insert Mode, the following translations apply:

<Key>Escape:			vi-mode()
<Key>BackSpace:			delete-previous-character() replace-tick()
<Key>Delete:			delete-previous-character() replace-tick()
<Key>Linefeed:			newline() replace-tick()
<Key>Return:			newline() replace-tick()
<Key>:				may-delete() insert-char() replace-tick()
:<Key>\",:<Key>0:		may-delete() insert-char() replace-tick()
:<Key>\",!:<Key>a:		may-delete() insert-char() replace-tick()
:<Key>\",!:<Key>b:		may-delete() insert-char() replace-tick()
:<Key>\",!:<Key>c:		may-delete() insert-char() replace-tick()
:<Key>\",!:<Key>d:		may-delete() insert-char() replace-tick()
:<Key>\",!:<Key>e:		may-delete() insert-char() replace-tick()
:<Key>\",!:<Key>f:		may-delete() insert-char() replace-tick()
:<Key>\\:,!:<Key>r:		may-delete() insert-char() replace-tick()
:<Key>\\:,!:<Key>w:		may-delete() insert-char() replace-tick()
!:<Key>z,<Key>Return:		newline() replace-tick()
!:<Key>z,:<Key>\.:		may-delete() insert-char() replace-tick()
!:<Key>z,<Key>\-:		may-delete() insert-char() replace-tick()
<FocusIn>:			focus-in()
<FocusOut>:			focus-out()
<Btn1Down>:			select-start()
<Btn1Motion>:			extend-adjust()
<Btn1Up>:			extend-end(PRIMARY, CUT_BUFFER0)
<Btn2Down>:			insert-selection(PRIMARY, CUT_BUFFER0)
<Btn3Down>:			extend-start()
<Btn3Motion>:			extend-adjust()
<Btn3Up>:			extend-end(PRIMARY, CUT_BUFFER0)

Find Translations:

<Key>Escape:			vi-mode()
<Key>:				find-character()
<FocusIn>:			focus-in()
<FocusOut>:			focus-out()
<Btn1Down>:			select-start()
<Btn1Motion>:			extend-adjust()
<Btn1Up>:			extend-end(PRIMARY, CUT_BUFFER0)
<Btn2Down>:			insert-selection(PRIMARY, CUT_BUFFER0)
<Btn3Down>:			extend-start()
<Btn3Motion>:			extend-adjust()
<Btn3Up>:			extend-end(PRIMARY, CUT_BUFFER0)

