You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
helix/book/src/keymap.md

25 KiB

Keymap

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

Normal mode

Movement

NOTE: Unlike vim, f, F, t and T 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
G Go to line number <n> goto_line
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
Ctrl-s Save the current selection to the jumplist save_selection
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
Alt-u Move backward in history earlier
Alt-U Move forward in history later
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 (currently nonfunctional/disabled) (LSP) format_selections
d Delete selection delete_selection
Alt-d Delete selection, without yanking delete_selection_noyank
c Change selection (delete and enter insert mode) change_selection
Alt-c Change selection (delete and enter insert mode, without yanking) change_selection_noyank
Ctrl-a Increment object (number) under cursor increment
Ctrl-x Decrement object (number) under cursor decrement
Q Start/stop macro recording to the selected register (experimental) record_macro
q Play back a recorded macro from the selected register (experimental) replay_macro

Shell

Key Description Command
| Pipe each selection through shell command, replacing with output shell_pipe
Alt-| Pipe each selection into shell command, ignoring output shell_pipe_to
! Run shell command, inserting output before each selection shell_insert_output
Alt-! 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
& Align selection in columns align_selections
_ Trim whitespace from the selection trim_selections
; 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 (Add cursor below) copy_selection_on_next_line
Alt-C Copy selection onto the previous line (Add cursor above) 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 (TS) expand_selection
J Join lines inside selection join_selections
K Keep selections matching the regex keep_selections
Alt-K Remove selections matching the regex remove_selections
$ Pipe each selection into shell command, keep selections where command returned 0 shell_keep_pipe
Ctrl-c Comment/uncomment the selections toggle_comments
Key Description Command
/ Search for regex pattern search
? Search for previous pattern rsearch
n Select next search match search_next
N Select previous search match search_prev
* 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 , down Scroll the view downwards scroll_down
k , up 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.

Key Description Command
g Go to line number <n> else start of file goto_file_start
e Go to the end of the file goto_last_line
f Go to files in the selection goto_file
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
c Go to the middle of the screen goto_window_center
b Go to the bottom of the screen goto_window_bottom
d Go to definition (LSP) goto_definition
y Go to type definition (LSP) goto_type_definition
r Go to references (LSP) goto_reference
i Go to implementation (LSP) goto_implementation
a Go to the last accessed/alternate file goto_last_accessed_file
m Go to the last modified/alternate file goto_last_modified_file
n Go to next buffer goto_next_buffer
p Go to previous buffer goto_previous_buffer
. Go to last modification in current file goto_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.

Key Description Command
m Goto 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 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
f Go to files in the selection in horizontal splits goto_file
F Go to files in the selection in vertical splits goto_file
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
o, Ctrl-o Only keep the current window, closing all the others wonly

Space mode

This layer is a kludge of mappings, mostly pickers.

Key Description Command
f Open file picker file_picker
b Open buffer picker buffer_picker
k Show documentation for item under cursor in a popup (LSP) hover
s Open document symbol picker (LSP) symbol_picker
S Open workspace symbol picker (LSP) workspace_symbol_picker
r Rename symbol (LSP) rename_symbol
a Apply code action (LSP) 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

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

Popup

Displays documentation for item under cursor.

Key Description
Ctrl-u Scroll up
Ctrl-d Scroll down

Unimpaired

Mappings in the style of vim-unimpaired.

Key Description Command
[d Go to previous diagnostic (LSP) goto_prev_diag
]d Go to next diagnostic (LSP) goto_next_diag
[D Go to first diagnostic in document (LSP) goto_first_diag
]D Go to last diagnostic in document (LSP) goto_last_diag
[space Add newline above add_newline_above
]space Add newline below add_newline_below
]o Expand syntax tree object selection. expand_selection
[o Shrink syntax tree object selection. shrink_selection

Insert Mode

Key Description Command
Escape Switch to normal mode normal_mode
Ctrl-x Autocomplete completion
Ctrl-r Insert a register content insert_register
Ctrl-w Delete previous word delete_word_backward
Alt-d Delete next word delete_word_forward
Alt-b, Alt-Left Backward a word move_prev_word_end
Ctrl-b, Left Backward a char move_char_left
Alt-f, Alt-Right Forward a word move_next_word_start
Ctrl-f, Right Forward a char move_char_right
Ctrl-e, End move to line end goto_line_end_newline
Ctrl-a, Home move to line start goto_line_start
Ctrl-u delete to start of line kill_to_line_start
Ctrl-k delete to end of line kill_to_line_end
backspace, Ctrl-h delete previous char delete_char_backward
delete, Ctrl-d delete previous char delete_char_forward
Ctrl-p, Up move to previous line move_line_up
Ctrl-n, Down move to next line move_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.

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

Prompt

Keys to use within prompt, Remapping currently not supported.

Key Description
Escape, Ctrl-c Close prompt
Alt-b, Alt-Left Backward a word
Ctrl-b, Left Backward a char
Alt-f, Alt-Right Forward a word
Ctrl-f, Right Forward a char
Ctrl-e, End Move prompt end
Ctrl-a, Home Move prompt start
Ctrl-w Delete previous word
Alt-d Delete next word
Ctrl-u Delete to start of line
Ctrl-k Delete to end of line
backspace, Ctrl-h Delete previous char
delete, Ctrl-d Delete next char
Ctrl-s Insert a word under doc cursor, may be changed to Ctrl-r Ctrl-w later
Ctrl-p, Up Select previous history
Ctrl-n, Down Select next history
Tab Select next completion item
BackTab Select previous completion item
Enter Open selected