Key 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).
-To remap keys, create a config.toml
file in your helix
configuration
-directory (default ~/.config/helix
on Linux systems) with a structure like
-this:
# At most one section each of 'keys.normal', 'keys.insert' and 'keys.select'
-[keys.normal]
-C-s = ":w" # Maps Ctrl-s to the typable command :w which is an alias for :write (save file)
-C-o = ":open ~/.config/helix/config.toml" # Maps Ctrl-o to opening of the helix config file
-a = "move_char_left" # Maps the 'a' key to the move_char_left command
-w = "move_line_up" # Maps the 'w' key move_line_up
-"C-S-esc" = "extend_line" # Maps Ctrl-Shift-Escape to extend_line
-g = { a = "code_action" } # Maps `ga` to show possible code actions
-"ret" = ["open_below", "normal_mode"] # Maps the enter key to open_below then re-enter normal mode
-
-[keys.insert]
-"A-x" = "normal_mode" # Maps Alt-X to enter normal mode
-j = { k = "normal_mode" } # Maps `jk` to exit insert 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]
-k = "normal_mode" # Maps `jk` to exit insert mode
-
-[keys.normal.g]
-a = "code_action" # Maps `ga` to show possible code actions
-
-# 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 name | Representation |
---|---|
Backspace | "backspace" |
Space | "space" |
Return/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" |
Keys can be disabled by binding them to the no_op
command.
To remove all default bindings, unbind-default-keys = true
can be added to the top level configuration.
unbind-default-keys = true
-
-# Only these normal mode bindings will be used
-[keys.normal]
-n = "normal_mode"
-t = "goto_definition"
-
-# remember to add bindings to return to normal mode
-[keys.select]
-esc = "normal_mode"
-
-[keys.insert]
-esc = "normal_mode"
-
-A list of commands is available in the Keymap documentation
-and in the source code at helix-term/src/commands.rs
at the invocation of static_commands!
macro and the TypableCommandList
.