Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'book/src/remapping.md')
| -rw-r--r-- | book/src/remapping.md | 136 |
1 files changed, 33 insertions, 103 deletions
diff --git a/book/src/remapping.md b/book/src/remapping.md index 9a9a611a..e89c6611 100644 --- a/book/src/remapping.md +++ b/book/src/remapping.md @@ -1,124 +1,54 @@ -## Key remapping +# Key Remapping -Helix currently supports one-way key remapping through a simple TOML configuration +One-way key remapping is temporarily supported via 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: - -* 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](./keymap.html) documentation and in the source code - in [`helix-term/src/commands.rs`](https://github.com/helix-editor/helix/blob/master/helix-term/src/commands.rs) - at the invocation of `static_commands!` macro. -* Typable commands: commands that can be executed from command mode (`:`), for - example `:write!`. See the [Commands](./commands.md) documentation for a - list of available typeable commands or the `TypableCommandList` declaration in - the source code at [`helix-term/src/commands/typed.rs`](https://github.com/helix-editor/helix/blob/master/helix-term/src/commands/typed.rs). -* Macros: sequences of keys that are executed in order. These keybindings - start with `@` and then list any number of keys to be executed. For example - `@miw` can be used to select the surrounding word. For now, macro keybindings - are not allowed in keybinding sequences due to limitations in the way that - command sequences are executed. Modifier keys (e.g. Alt+o) can be used - like `"<A-o>"`, e.g. `"@miw<A-o>"` - -To remap keys, create a `config.toml` file in your `helix` configuration -directory (default `~/.config/helix` on Linux systems) with a structure like +To remap keys, write a `config.toml` file in your `helix` configuration +directory (default `~/.config/helix` in Linux systems) with a structure like this: -> 💡 To set a modifier + key as a keymap, type `A-X = ...` or `C-X = ...` for Alt + X or Ctrl + X. Combine with Shift using a dash, e.g. `C-S-esc`. -> Within macros, wrap them in `<>`, e.g. `<A-X>` and `<C-X>` to distinguish from the `A` or `C` keys. - ```toml # 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 +C-s = ":w" # Maps the Ctrl-s to the typable command :w which is an alias for :write (save file) +C-o = ":open ~/.config/helix/config.toml" # Maps the 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 -"A-x" = "@x<A-d>" # Maps Alt-x to a macro selecting the whole line and deleting it without yanking it [keys.insert] -"A-x" = "normal_mode" # Maps Alt-X to enter normal mode +"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. - -```toml -[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-`. - -The [Super key](https://en.wikipedia.org/wiki/Super_key_(keyboard_button)) - the Windows/Linux -key or the Command key on Mac keyboards - is also supported when using a terminal emulator that -supports the [enhanced keyboard protocol](https://github.com/helix-editor/helix/wiki/Terminal-Support#enhanced-keyboard-protocol). -The super key is encoded with prefixes `Meta-`, `Cmd-` or `Win-`. These are all synonyms for the -super modifier - binding a key with a `Win-` modifier will mean it can be used with the -Windows/Linux key or the Command key. - -```toml -[keys.normal] -C-s = ":write" # Ctrl and 's' to write -Cmd-s = ":write" # Cmd or Win or Meta and 's' to write -``` - -Special keys are encoded as follows: - -| Key name | Representation | -| --- | --- | -| Backspace | `"backspace"` | -| Space | `"space"` | -| Return/Enter | `"ret"` | -| 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"` | -| Less Than (<) | `"lt"` | -| Greater Than (>) | `"gt"` | +> NOTE: Typable commands can also be remapped, remember to keep the `:` prefix to indicate it's a typable command. + +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. -All other keys such as `?`, `!`, `-` etc. can be used literally: - -```toml -[keys.normal] -"?" = ":write" -"!" = ":write" -"-" = ":write" -``` - -Note: `-` can't be used when combined with a modifier, for example `Alt` + `-` should be written as `A-minus`. `A--` is not accepted. +Commands can be found at [Keymap](https://docs.helix-editor.com/keymap.html) Commands. +> Commands can also be found in the source code at [`helix-term/src/commands.rs`](https://github.com/helix-editor/helix/blob/master/helix-term/src/commands.rs) at the invocation of `static_commands!` macro and the `TypableCommandList`. |