| <kbd>Shift</kbd>+<kbd>A</kbd> | Append to end of line |
| <kbd>0</kbd> | Move to start of line |
| <kbd>^</kbd> | Move to start of line |
| <kbd>$</kbd> | Move to end of line |
| <kbd>c</kbd> | Change |
| <kbd>r</kbd> | Replace |
| <kbd>s</kbd> | Substitute character(s) |
| <kbd>x</kbd> | Delete character |
| <kbd>u</kbd> | Undo |
## Command History
As mentioned before, Reedline manages and stores all the commands that are
edited and sent to Nushell. To configure the max number of records that
Reedline should store you will need to adjust this value in your config file:
```nu
$env.config = {
...
history: {
...
max_size: 1000
...
}
...
}
```
## Customizing the Prompt
The Reedline prompt is configured using a number of environment variables. See [Prompt Configuration](./configuration.md#prompt-configuration) for details.
## Keybindings
Reedline keybindings are powerful constructs that let you build chains of
events that can be triggered with a specific combination of keys.
For example, let's say that you would like to map the completion menu to the
`Ctrl + t` keybinding (default is `tab`). You can add the next entry to your
config file.
```nu
$env.config = {
...
keybindings: [
{
name: completion_menu
modifier: control
keycode: char_t
mode: emacs
event: { send: menu name: completion_menu }
}
]
...
}
```
After loading this new `config.nu`, your new keybinding (`Ctrl + t`) will open
the completion command.
Each keybinding requires the next elements:
- name: Unique name for your keybinding for easy reference in `$config.keybindings`
- modifier: A key modifier for the keybinding. The options are:
- none
- control
- alt
- shift
- shift_alt
- alt_shift
- control_alt
- alt_control
- control_shift
- shift_control
- control_alt_shift
- control_shift_alt
- keycode: This represent the key to be pressed
- mode: emacs, vi_insert, vi_normal (a single string or a list. e.g.
[`vi_insert` `vi_normal`])
- event: The type of event that is going to be sent by the keybinding. The
options are:
- send
- edit
- until
::: tip
All of the available modifiers, keycodes and events can be found with
the command [`keybindings list`](/commands/docs/keybindings_list.md)
:::
::: tip
The keybindings added to `vi_insert` mode will be available when the
line editor is in insert mode (when you can write text), and the keybindings
marked with `vi_normal` mode will be available when in normal (when the cursor
moves using h, j, k or l)
:::
The event section of the keybinding entry is where the actions to be performed
are defined. In this field you can use either a record or a list of records.
Something like this
```nu
...
event: { send: Enter }
...
```
or
```nu
...
event: [
{ edit: Clear }
{ send: Enter }
]
...
```
The first keybinding example shown in this page follows the first case; a
single event is sent to the engine.
The next keybinding is an example of a series of events sent to the engine. It
first clears the prompt, inserts a string and then enters that value
```nu
$env.config = {
...
keybindings: [
{
name: change_dir_with_fzf
modifier: CONTROL
keycode: Char_t
mode: emacs
event:[
{ edit: Clear }
{ edit: InsertString,
value: "cd (ls | where type == dir | each { |row| $row.name} | str join (char nl) | fzf | decode utf-8 | str trim)"
}
{ send: Enter }