Skip to content

Keys

F1 shows the keys your terminal can send, and Ctrl+P finds every command by name, so you never need to memorise this page. A terminal can still intercept its own shortcuts before Mellow receives them.

Everyday

Key Action
Ctrl+S Save
Ctrl+O Open a file (fuzzy search; type a path to create one)
Ctrl+N New file
Ctrl+F Find in file (press twice: all files)
Ctrl+P Every command
Ctrl+B Show or hide the file tree
Ctrl+T Terminal (again: back to the editor)
Ctrl+K Ask AI
Ctrl+Z Undo
Ctrl+W Close file
Ctrl+Q Quit
F1 Help

More

Key Action
Ctrl+Y Redo (also Ctrl+Shift+Z)
Ctrl+H Replace, with a preview
Ctrl+D Select next occurrence (multi-cursor)
Ctrl+G Go to line (and column)
Ctrl+PgDn / Ctrl+PgUp Next / previous file
Ctrl+/ Comment line
Alt+Up / Alt+Down Move line
Alt+Shift+Down Duplicate line
Ctrl+\ Split editor; F6 moves between panes
F12 Go to definition (needs a language server)
Ctrl+Space Suggestions
Alt+Z Word wrap

Moving and selecting

Key Action
Arrows, PgUp, PgDn Move
Home / End Line start (first non-blank, then column 0) / end
Ctrl+Left / Ctrl+Right By word (Alt+Left / Alt+Right on macOS terminals)
Ctrl+Home / Ctrl+End File start / end
Ctrl+Backspace / Ctrl+Delete Delete a word
add Shift Select while moving

Extra chords

These need a terminal with the kitty keyboard protocol (kitty, WezTerm, Ghostty, foot and others):

Key Action
Ctrl+Shift+F Find in all files
Ctrl+Tab / Ctrl+Shift+Tab Next / previous file
Ctrl+Shift+S Save As (otherwise use the palette)
Ctrl+Shift+G Git changes
Ctrl+Shift+M Problems
Ctrl+Shift+O Go to symbol: jump to a function, type or other definition (Rust, Python, Shell)

Without the kitty protocol

Terminals such as Terminal.app do not send the Shift chords above: Ctrl+Shift+O arrives as plain Ctrl+O, which opens a file. Everything in those tables is still in Ctrl+P, so the palette is the reliable path. Mellow shows the keys your terminal can send in F1.

In dialogs

Lists (the palette, Open file, Go to symbol, references and Git lists) take clicks and the mouse wheel. Confirmations and text prompts have buttons, such as [Enter] Commit and [Esc] Cancel, and Esc closes any dialog.

In the commit box, Ctrl+G drafts a commit message from your staged changes with AI. The draft goes into the box for you to read; nothing is committed until you press Enter.

When a file changed on disk while you were editing it, saving asks first: [S] Save As, [O] Overwrite, [C] Compare (shows both versions and decides nothing; the next save asks again) and [Esc] Cancel.

A message the status line cuts short can be read in full with Show recent messages in the palette.

In the terminal

Inside the built-in terminal, keys go to the shell: Ctrl+C interrupts the running program instead of copying. Ctrl+T returns to the editor.

Custom keybindings

Create ~/.config/mellow/keybindings.conf (or use $XDG_CONFIG_HOME/mellow/keybindings.conf). Each line maps a command ID to one or more comma-separated keys. For example, keep Ctrl+S and add F2 for save:

file.save = Ctrl+S, F2

Use Reload keybindings in the palette after editing, or restart Mellow. MELLOW_KEYMAP=/path/keybindings.conf selects another file. Set a command to none to remove its bindings. Conflicting bindings, unknown command IDs and unsupported chords are reported as errors; fix the file instead of assuming the override took effect. The full command IDs are defined in src/command.rs.

Keymap presets

The keymap file can start from a preset. Add one line, and your own command.id = binding lines still win over it:

preset = vscode   # Ctrl+P opens files; Ctrl+Shift+P or F1 opens commands

default keeps Mellow's own keys. vscode gives Ctrl+P for files and Ctrl+Shift+P or F1 for commands. nano keeps nano's habits: Ctrl+O saves, Ctrl+X quits, Ctrl+W searches, Ctrl+K cuts, Ctrl+U pastes and Ctrl+R opens a file. Close tab moves to Alt+W and Ask AI to Alt+K to make room. Many terminals send Ctrl+Shift+P as plain Ctrl+P, so with vscode use F1 for commands.