• Mappings marked (LSP) require an active language server for the file.
  • Mappings marked (TS) require a tree-sitter grammar for the filetype.

Normal mode


NOTE: Unlike vim, f, F, t and T are not confined to the current line.

h/LeftMove leftmove_char_left
j/DownMove downmove_line_down
k/UpMove upmove_line_up
l/RightMove rightmove_char_right
wMove next word startmove_next_word_start
bMove previous word startmove_prev_word_start
eMove next word endmove_next_word_end
WMove next WORD startmove_next_long_word_start
BMove previous WORD startmove_prev_long_word_start
EMove next WORD endmove_next_long_word_end
tFind 'till next charfind_till_char
fFind next charfind_next_char
TFind 'till previous chartill_prev_char
FFind previous charfind_prev_char
GGo to line number <n>goto_line
Alt-.Repeat last motion (f, t or m)repeat_last_motion
HomeMove to the start of the linegoto_line_start
EndMove to the end of the linegoto_line_end
PageUpMove page uppage_up
PageDownMove page downpage_down
Ctrl-uMove half page uphalf_page_up
Ctrl-dMove half page downhalf_page_down
Ctrl-iJump forward on the jumplistjump_forward
Ctrl-oJump backward on the jumplistjump_backward
Ctrl-sSave the current selection to the jumplistsave_selection
vEnter select (extend) modeselect_mode
gEnter goto modeN/A
mEnter match modeN/A
:Enter command modecommand_mode
zEnter view modeN/A
ZEnter sticky view modeN/A
Ctrl-wEnter window modeN/A
SpaceEnter space modeN/A


rReplace with a characterreplace
RReplace with yanked textreplace_with_yanked
~Switch case of the selected textswitch_case
`Set the selected text to lower caseswitch_to_lowercase
Alt-`Set the selected text to upper caseswitch_to_uppercase
iInsert before selectioninsert_mode
aInsert after selection (append)append_mode
IInsert at the start of the lineprepend_to_line
AInsert at the end of the lineappend_to_line
oOpen new line below selectionopen_below
OOpen new line above selectionopen_above
.Repeat last changeN/A
uUndo changeundo
URedo changeredo
Alt-uMove backward in historyearlier
Alt-UMove forward in historylater
yYank selectionyank
pPaste after selectionpaste_after
PPaste before selectionpaste_before
" <reg>Select a register to yank to or paste fromselect_register
>Indent selectionindent
<Unindent selectionunindent
=Format selection (currently nonfunctional/disabled) (LSP)format_selections
dDelete selectiondelete_selection
Alt-dDelete selection, without yankingdelete_selection_noyank
cChange selection (delete and enter insert mode)change_selection
Alt-cChange selection (delete and enter insert mode, without yanking)change_selection_noyank
Ctrl-aIncrement object (number) under cursorincrement
Ctrl-xDecrement object (number) under cursordecrement
QStart/stop macro recording to the selected register (experimental)record_macro
qPlay back a recorded macro from the selected register (experimental)replay_macro


|Pipe each selection through shell command, replacing with outputshell_pipe
Alt-|Pipe each selection into shell command, ignoring outputshell_pipe_to
!Run shell command, inserting output before each selectionshell_insert_output
Alt-!Run shell command, appending output after each selectionshell_append_output

Selection manipulation

sSelect all regex matches inside selectionsselect_regex
SSplit selection into subselections on regex matchessplit_selection
Alt-sSplit selection on newlinessplit_selection_on_newline
&Align selection in columnsalign_selections
_Trim whitespace from the selectiontrim_selections
;Collapse selection onto a single cursorcollapse_selection
Alt-;Flip selection cursor and anchorflip_selections
,Keep only the primary selectionkeep_primary_selection
Alt-,Remove the primary selectionremove_primary_selection
CCopy selection onto the next line (Add cursor below)copy_selection_on_next_line
Alt-CCopy selection onto the previous line (Add cursor above)copy_selection_on_prev_line
(Rotate main selection backwardrotate_selections_backward
)Rotate main selection forwardrotate_selections_forward
Alt-(Rotate selection contents backwardrotate_selection_contents_backward
Alt-)Rotate selection contents forwardrotate_selection_contents_forward
%Select entire fileselect_all
xSelect current line, if already selected, extend to next lineextend_line
XExtend selection to line bounds (line-wise selection)extend_to_line_bounds
Expand selection to parent syntax node TODO: pick a key (TS)expand_selection
JJoin lines inside selectionjoin_selections
KKeep selections matching the regexkeep_selections
Alt-KRemove selections matching the regexremove_selections
$Pipe each selection into shell command, keep selections where command returned 0shell_keep_pipe
Ctrl-cComment/uncomment the selectionstoggle_comments
Alt-kExpand selection to parent syntax nodeexpand_selection
Alt-jShrink syntax tree object selectionshrink_selection
Alt-hSelect previous sibling node in syntax treeselect_prev_sibling
Alt-lSelect next sibling node in syntax treeselect_next_sibling
/Search for regex patternsearch
?Search for previous patternrsearch
nSelect next search matchsearch_next
NSelect previous search matchsearch_prev
*Use current selection as the search patternsearch_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).

z , cVertically center the linealign_view_center
tAlign the line to the top of the screenalign_view_top
bAlign the line to the bottom of the screenalign_view_bottom
mAlign the line to the middle of the screen (horizontally)align_view_middle
j , downScroll the view downwardsscroll_down
k , upScroll the view upwardsscroll_up
fMove page downpage_down
bMove page uppage_up
dMove half page downhalf_page_down
uMove half page uphalf_page_up

Goto mode

Jumps to various locations.

gGo to line number <n> else start of filegoto_file_start
eGo to the end of the filegoto_last_line
fGo to files in the selectiongoto_file
hGo to the start of the linegoto_line_start
lGo to the end of the linegoto_line_end
sGo to first non-whitespace character of the linegoto_first_nonwhitespace
tGo to the top of the screengoto_window_top
cGo to the middle of the screengoto_window_center
bGo to the bottom of the screengoto_window_bottom
dGo to definition (LSP)goto_definition
yGo to type definition (LSP)goto_type_definition
rGo to references (LSP)goto_reference
iGo to implementation (LSP)goto_implementation
aGo to the last accessed/alternate filegoto_last_accessed_file
mGo to the last modified/alternate filegoto_last_modified_file
nGo to next buffergoto_next_buffer
pGo to previous buffergoto_previous_buffer
.Go to last modification in current filegoto_last_modification

Match mode

Enter this mode using m from normal mode. See the relavant section in Usage for an explanation about surround and textobject usage.

mGoto matching bracket (TS)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 textobjectselect_textobject_around
i <object>Select inside textobjectselect_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.

w, Ctrl-wSwitch to next windowrotate_view
v, Ctrl-vVertical right splitvsplit
s, Ctrl-sHorizontal bottom splithsplit
h, Ctrl-h, leftMove to left splitjump_view_left
fGo to files in the selection in horizontal splitsgoto_file
FGo to files in the selection in vertical splitsgoto_file
j, Ctrl-j, downMove to split belowjump_view_down
k, Ctrl-k, upMove to split abovejump_view_up
l, Ctrl-l, rightMove to right splitjump_view_right
q, Ctrl-qClose current windowwclose
o, Ctrl-oOnly keep the current window, closing all the otherswonly

Space mode

This layer is a kludge of mappings, mostly pickers.

fOpen file pickerfile_picker
bOpen buffer pickerbuffer_picker
kShow documentation for item under cursor in a popup (LSP)hover
sOpen document symbol picker (LSP)symbol_picker
SOpen workspace symbol picker (LSP)workspace_symbol_picker
rRename symbol (LSP)rename_symbol
aApply code action (LSP)code_action
'Open last fuzzy pickerlast_picker
wEnter window modeN/A
pPaste system clipboard after selectionspaste_clipboard_after
PPaste system clipboard before selectionspaste_clipboard_before
yJoin and yank selections to clipboardyank_joined_to_clipboard
YYank main selection to clipboardyank_main_selection_to_clipboard
RReplace selections by clipboard contentsreplace_selections_with_clipboard
/Global search in workspace folderglobal_search

TIP: Global search displays results in a fuzzy picker, use space + ' to bring it back up after opening a file.

Displays documentation for item under cursor.

Ctrl-uScroll up
Ctrl-dScroll down


Mappings in the style of vim-unimpaired.

[dGo to previous diagnostic (LSP)goto_prev_diag
]dGo to next diagnostic (LSP)goto_next_diag
[DGo to first diagnostic in document (LSP)goto_first_diag
]DGo to last diagnostic in document (LSP)goto_last_diag
[spaceAdd newline aboveadd_newline_above
]spaceAdd newline belowadd_newline_below

Insert Mode

EscapeSwitch to normal modenormal_mode
Ctrl-rInsert a register contentinsert_register
Ctrl-wDelete previous worddelete_word_backward
Alt-dDelete next worddelete_word_forward
Alt-b, Alt-LeftBackward a wordmove_prev_word_end
Ctrl-b, LeftBackward a charmove_char_left
Alt-f, Alt-RightForward a wordmove_next_word_start
Ctrl-f, RightForward a charmove_char_right
Ctrl-e, Endmove to line endgoto_line_end_newline
Ctrl-a, Homemove to line startgoto_line_start
Ctrl-udelete to start of linekill_to_line_start
Ctrl-kdelete to end of linekill_to_line_end
backspace, Ctrl-hdelete previous chardelete_char_backward
delete, Ctrl-ddelete previous chardelete_char_forward
Ctrl-p, Upmove to previous linemove_line_up
Ctrl-n, Downmove to next linemove_line_down

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.


Keys to use within picker. Remapping currently not supported.

Up, Ctrl-k, Ctrl-pPrevious entry
Down, Ctrl-j, Ctrl-nNext entry
Ctrl-spaceFilter options
EnterOpen selected
Ctrl-sOpen horizontally
Ctrl-vOpen vertically
Escape, Ctrl-cClose picker


Keys to use within prompt, Remapping currently not supported.

Escape, Ctrl-cClose prompt
Alt-b, Alt-LeftBackward a word
Ctrl-b, LeftBackward a char
Alt-f, Alt-RightForward a word
Ctrl-f, RightForward a char
Ctrl-e, EndMove prompt end
Ctrl-a, HomeMove prompt start
Ctrl-wDelete previous word
Alt-dDelete next word
Ctrl-uDelete to start of line
Ctrl-kDelete to end of line
backspace, Ctrl-hDelete previous char
delete, Ctrl-dDelete next char
Ctrl-sInsert a word under doc cursor, may be changed to Ctrl-r Ctrl-w later
Ctrl-p, UpSelect previous history
Ctrl-n, DownSelect next history
TabSelect next completion item
BackTabSelect previous completion item
EnterOpen selected