18 KiB
Keymap
Normal mode
Movement
NOTE: Unlike vim,
f
,F
,t
andT
are not confined to the current line.
Key | Description | Command |
---|---|---|
h /Left |
Move left | move_char_left |
j /Down |
Move down | move_line_down |
k /Up |
Move up | move_line_up |
l /Right |
Move right | move_char_right |
w |
Move next word start | move_next_word_start |
b |
Move previous word start | move_prev_word_start |
e |
Move next word end | move_next_word_end |
W |
Move next WORD start | move_next_long_word_start |
B |
Move previous WORD start | move_prev_long_word_start |
E |
Move next WORD end | move_next_long_word_end |
t |
Find 'till next char | find_till_char |
f |
Find next char | find_next_char |
T |
Find 'till previous char | till_prev_char |
F |
Find previous char | find_prev_char |
Alt-. |
Repeat last motion (f , t or m ) |
repeat_last_motion |
Home |
Move to the start of the line | goto_line_start |
End |
Move to the end of the line | goto_line_end |
PageUp |
Move page up | page_up |
PageDown |
Move page down | page_down |
Ctrl-u |
Move half page up | half_page_up |
Ctrl-d |
Move half page down | half_page_down |
Ctrl-i |
Jump forward on the jumplist | jump_forward |
Ctrl-o |
Jump backward on the jumplist | jump_backward |
v |
Enter select (extend) mode | select_mode |
g |
Enter goto mode | N/A |
m |
Enter match mode | N/A |
: |
Enter command mode | command_mode |
z |
Enter view mode | N/A |
Z |
Enter sticky view mode | N/A |
Ctrl-w |
Enter window mode | N/A |
Space |
Enter space mode | N/A |
Changes
Key | Description | Command |
---|---|---|
r |
Replace with a character | replace |
R |
Replace with yanked text | replace_with_yanked |
~ |
Switch case of the selected text | switch_case |
` |
Set the selected text to lower case | switch_to_lowercase |
Alt-` |
Set the selected text to upper case | switch_to_uppercase |
i |
Insert before selection | insert_mode |
a |
Insert after selection (append) | append_mode |
I |
Insert at the start of the line | prepend_to_line |
A |
Insert at the end of the line | append_to_line |
o |
Open new line below selection | open_below |
O |
Open new line above selection | open_above |
. |
Repeat last change | N/A |
u |
Undo change | undo |
U |
Redo change | redo |
y |
Yank selection | yank |
p |
Paste after selection | paste_after |
P |
Paste before selection | paste_before |
" <reg> |
Select a register to yank to or paste from | select_register |
> |
Indent selection | indent |
< |
Unindent selection | unindent |
= |
Format selection | format_selections |
d |
Delete selection | delete_selection |
c |
Change selection (delete and enter insert mode) | change_selection |
Shell
Key | Description | Command |
---|---|---|
| |
Pipe each selection through shell command, replacing with output | shell_pipe |
A-| |
Pipe each selection into shell command, ignoring output | shell_pipe_to |
! |
Run shell command, inserting output before each selection | shell_insert_output |
A-! |
Run shell command, appending output after each selection | shell_append_output |
Selection manipulation
Key | Description | Command |
---|---|---|
s |
Select all regex matches inside selections | select_regex |
S |
Split selection into subselections on regex matches | split_selection |
Alt-s |
Split selection on newlines | split_selection_on_newline |
; |
Collapse selection onto a single cursor | collapse_selection |
Alt-; |
Flip selection cursor and anchor | flip_selections |
, |
Keep only the primary selection | keep_primary_selection |
Alt-, |
Remove the primary selection | remove_primary_selection |
C |
Copy selection onto the next line | copy_selection_on_next_line |
Alt-C |
Copy selection onto the previous line | copy_selection_on_prev_line |
( |
Rotate main selection backward | rotate_selections_backward |
) |
Rotate main selection forward | rotate_selections_forward |
Alt-( |
Rotate selection contents backward | rotate_selection_contents_backward |
Alt-) |
Rotate selection contents forward | rotate_selection_contents_forward |
% |
Select entire file | select_all |
x |
Select current line, if already selected, extend to next line | extend_line |
X |
Extend selection to line bounds (line-wise selection) | extend_to_line_bounds |
Expand selection to parent syntax node TODO: pick a key | expand_selection |
|
J |
Join lines inside selection | join_selections |
K |
Keep selections matching the regex | keep_selections |
$ |
Pipe each selection into shell command, keep selections where command returned 0 | shell_keep_pipe |
Ctrl-c |
Comment/uncomment the selections | toggle_comments |
Search
TODO: The search implementation isn't ideal yet -- we don't support searching in reverse.
Key | Description | Command |
---|---|---|
/ |
Search for regex pattern | search |
n |
Select next search match | search_next |
N |
Add next search match to selection | extend_search_next |
* |
Use current selection as the search pattern | search_selection |
Minor modes
These sub-modes are accessible from normal mode and typically switch back to normal mode after a command.
View mode
View mode is intended for scrolling and manipulating the view without changing the selection. The "sticky" variant of this mode is persistent; use the Escape key to return to normal mode after usage (useful when you're simply looking over text and not actively editing it).
Key | Description | Command |
---|---|---|
z , c |
Vertically center the line | align_view_center |
t |
Align the line to the top of the screen | align_view_top |
b |
Align the line to the bottom of the screen | align_view_bottom |
m |
Align the line to the middle of the screen (horizontally) | align_view_middle |
j |
Scroll the view downwards | scroll_down |
k |
Scroll the view upwards | scroll_up |
f |
Move page down | page_down |
b |
Move page up | page_up |
d |
Move half page down | half_page_down |
u |
Move half page up | half_page_up |
Goto mode
Jumps to various locations.
NOTE: Some of these features are only available with the LSP present.
Key | Description | Command |
---|---|---|
g |
Go to the start of the file | goto_file_start |
e |
Go to the end of the file | goto_last_line |
h |
Go to the start of the line | goto_line_start |
l |
Go to the end of the line | goto_line_end |
s |
Go to first non-whitespace character of the line | goto_first_nonwhitespace |
t |
Go to the top of the screen | goto_window_top |
m |
Go to the middle of the screen | goto_window_middle |
b |
Go to the bottom of the screen | goto_window_bottom |
d |
Go to definition | goto_definition |
y |
Go to type definition | goto_type_definition |
r |
Go to references | goto_reference |
i |
Go to implementation | goto_implementation |
a |
Go to the last accessed/alternate file | goto_last_accessed_file |
Match mode
Enter this mode using m
from normal mode. See the relavant section
in Usage for an explanation about surround
and textobject usage.
Key | Description | Command |
---|---|---|
m |
Goto matching bracket | match_brackets |
s <char> |
Surround current selection with <char> |
surround_add |
r <from><to> |
Replace surround character <from> with <to> |
surround_replace |
d <char> |
Delete surround character <char> |
surround_delete |
a <object> |
Select around textobject | select_textobject_around |
i <object> |
Select inside textobject | select_textobject_inner |
TODO: Mappings for selecting syntax nodes (a superset of [
).
Window mode
This layer is similar to vim keybindings as kakoune does not support window.
Key | Description | Command |
---|---|---|
w , Ctrl-w |
Switch to next window | rotate_view |
v , Ctrl-v |
Vertical right split | vsplit |
s , Ctrl-s |
Horizontal bottom split | hsplit |
h , Ctrl-h , left |
Move to left split | jump_view_left |
j , Ctrl-j , down |
Move to split below | jump_view_down |
k , Ctrl-k , up |
Move to split above | jump_view_up |
l , Ctrl-l , right |
Move to right split | jump_view_right |
q , Ctrl-q |
Close current window | wclose |
Space mode
This layer is a kludge of mappings, mostly pickers.
Key | Description | Command |
---|---|---|
k |
Show documentation for the item under the cursor | hover |
f |
Open file picker | file_picker |
b |
Open buffer picker | buffer_picker |
s |
Open symbol picker (current document) | symbol_picker |
a |
Apply code action | code_action |
' |
Open last fuzzy picker | last_picker |
w |
Enter window mode | N/A |
p |
Paste system clipboard after selections | paste_clipboard_after |
P |
Paste system clipboard before selections | paste_clipboard_before |
y |
Join and yank selections to clipboard | yank_joined_to_clipboard |
Y |
Yank main selection to clipboard | yank_main_selection_to_clipboard |
R |
Replace selections by clipboard contents | replace_selections_with_clipboard |
/ |
Global search in workspace folder | global_search |
NOTE: Global search display results in a fuzzy picker, use
space + '
to bring it back up after opening a file.
Unimpaired
Mappings in the style of vim-unimpaired.
Key | Description | Command |
---|---|---|
[d |
Go to previous diagnostic | goto_prev_diag |
]d |
Go to next diagnostic | goto_next_diag |
[D |
Go to first diagnostic in document | goto_first_diag |
]D |
Go to last diagnostic in document | goto_last_diag |
[space |
Add newline above | add_newline_above |
]space |
Add newline below | add_newline_below |
Insert Mode
Key | Description | Command |
---|---|---|
Escape |
Switch to normal mode | normal_mode |
Ctrl-x |
Autocomplete | completion |
Ctrl-w |
Delete previous word | delete_word_backward |
Select / extend mode
I'm still pondering whether to keep this mode or not. It changes movement commands (including goto) to extend the existing selection instead of replacing it.
NOTE: It's a bit confusing at the moment because extend hasn't been implemented for all movement commands yet.
Picker
Keys to use within picker. Remapping currently not supported.
Key | Description |
---|---|
Up , Ctrl-k , Ctrl-p |
Previous entry |
Down , Ctrl-j , Ctrl-n |
Next entry |
Ctrl-space |
Filter options |
Enter |
Open selected |
Ctrl-s |
Open horizontally |
Ctrl-v |
Open vertically |
Escape , Ctrl-c |
Close picker |