Skip to content

Remapping

Helix currently supports one-way key remapping through a simple TOML configuration file. (More powerful solutions such as rebinding via commands will be available in the future).

There are three kinds of commands that can be used in keymaps:

Types of Commands

Static Commands

Commands like move_char_right which are usually bound to keys and used for movement and editing.

A list of static commands is available in the Keymap documentation and in the source code in helix-term/src/commands.rs

Typable Commands

Commands that can be executed from command mode (:), for example :write!.

See the Typed Commands documentation for a list of available typeable commands.

Also available at TypableCommandList declaration in the source code at helix-term/src/commands/typed.rs.

Remapping

To remap keys, create a config.toml file in your helix configuration directory (default ~/.config/helix on Linux systems) with a structure like this:

Example

# At most one section each of 'keys.normal', 'keys.insert' and 'keys.select'
[keys.normal]
# Maps Ctrl-s to the typable command :w which is an alias for :write (save file)
C-s = ":w"
# Maps Ctrl-o to opening of the helix config file
C-o = ":config-open"
# Maps the 'a' key to the move_char_left command
a = "move_char_left"
# Maps the 'w' key move_line_up
w = "move_line_up"
# Maps Ctrl-Shift-Escape to extend_line
"C-S-esc" = "extend_line"
# Maps `ga` to show possible code actions
g = { a = "code_action" }
# Maps the enter key to open_below then re-enter normal mode
"ret" = ["open_below", "normal_mode"]
# Maps Alt-x to a macro selecting the whole line and deleting it without yanking it
"A-x" = "@x<A-d>"
[keys.insert]
# Maps Alt-X to enter normal mode
"A-x" = "normal_mode"
# Maps `jk` to exit insert mode
j = { k = "normal_mode" }

Minor modes

Minor modes are accessed by pressing a key (usually from normal mode), giving access to dedicated bindings.

Bindings can be modified or added by nesting definitions.

[keys.insert.j]
# Maps `jk` to exit insert mode
k = "normal_mode"
[keys.normal.g]
# Maps `ga` to show possible code actions
a = "code_action"
# invert `j` and `k` in view mode
[keys.normal.z]
j = "scroll_up"
k = "scroll_down"
# create a new minor mode bound to `+`
[keys.normal."+"]
m = ":run-shell-command make"
c = ":run-shell-command cargo build"
t = ":run-shell-command cargo test"

Special keys and modifiers

Ctrl, Shift and Alt modifiers are encoded respectively with the prefixes C-, S- and A-. Special keys are encoded as follows:

Key nameRepresentation
Backspace"backspace"
Space"space"
Return or Enter"ret"
-"minus"
Left"left"
Right"right"
Up"up"
Down"down"
Home"home"
End"end"
Page Up"pageup"
Page Down"pagedown"
Tab"tab"
Delete"del"
Insert"ins"
Null"null"
Escape"esc"

Other keys such as /, + and ? can be referenced literally.