# vi Bindings

Note: I haven't yet written a real version of this document. In lieu of that, what follows is a listing of the `vi` keyboard editing bindings, converted mechanically from the tables in the code.

## Text Windows

### Command Mode

Control-slash - select_all
Control-backslash - clear_selection
Delete - vi:left
BackSpace - vi:left
space - vi:right
minus - vi:minus
plus - vi:plus
Return - vi:plus
Up - vi:up
Down - vi:down
Left - vi:left
Right - vi:right
Control-p - vi:up
Control-n - vi:down
k - vi:up
j - vi:down
h - vi:left
l - vi:right

Control-k - vi:up
Control-j - vi:down
Control-h - vi:left
Control-l - vi:right
Control-b - scroll_up
Control-f - scroll_down
x - delete_right
X - delete_left
b - word_left
B - word_left
e - vi:word_end
w - word_right
W - word_right
G - eof
i - vi:insert
I - vi:Insert
a - vi:append
A - vi:Append
o - vi:open
O - vi:Open
d - new_mode vi-delete
c - new_mode vi-change
D - vi:d-eol
C - vi:c-eol

Home - bol
End - eol
asciicircum - vi:bol
dollar - vi:eol
Next - scroll_down
Prior - scroll_up
d - vi:dd
w - vi:dw
W - vi:dw
dollar - vi:d-eol
c - vi:cd
w - vi:cw
W - vi:cw
dollar - vi:c-eol
Escape - vi:clear_count
Control-bracketleft - vi:clear_count
0-9 - continue_number

### Insert Mode

Delete - delete_left
BackSpace - delete_left
Return - insert_newline
Control-i - self_insert
Control-j - self_insert
Control-h - delete_left
Control-w - delete_left_word
Control-u - vi:delete_left_line
Escape - vi:command
Control-bracketleft - vi:command
Control-v - new_mode vi-literal

## Text Entry Fields

Text entry fields, unlike multiline text windows, start off in insert mode; you can press Escape to get to command mode.

### Insert Mode

Control-slash - select_all
Control-backslash - clear_selection
Delete - delete_left
BackSpace - delete_left
Control-i - self_insert
Control-j - self_insert
Control-h - delete_left
Control-w - delete_word_left
Control-u - vi:delete_left_line
Escape - vi:command
Control-bracketleft - vi:command
Control-v - new_mode vi-literal

### Command Mode

Control-slash - select_all
Control-backslash - clear_selection
Delete - left
BackSpace - left
space - right
Left - left
Right - right
h - left
l - right

Control-h - left
Control-l - right

x - delete_right
X - delete_left
b - word_left
B - word_left
w - word_right
W - word_right
i - vi:insert
a - vi:append
I - vi:insert-bol
A - vi:append-eol
asciicircum - bol
dollar - vi:eol
Home - bol
End - vi:eol

## Bugs

* The circumflex doesn't work properly in entry widgets.

* The `vi` bindings don't distinguish between `vi`'s two notions of a word (contiguous alphanumerics vs. contiguous nonblank characters).

## See Also

Mouse Bindings
Emacs Bindings
Basic Bindings
ComposeKey Combinations
`
`