Skip to main content
Fresh uses context-aware keybindings that adapt based on what part of the editor you’re using.

Viewing Keybindings

There are several ways to discover keybindings in Fresh:

Command Palette

Press Ctrl+P (or ⌘+P on macOS) to open the command palette. Type any command name to see its assigned keybinding.

Keyboard Shortcuts View

Open Help → Keyboard Shortcuts from the menu to view the complete list of all keybindings organized by category.

Keybinding Editor

Open Edit → Keybinding Editor to customize keybindings interactively.

Keybinding Maps

Fresh supports multiple keybinding maps (styles) that you can switch between:
  • default - Fresh’s native keybindings (optimized for terminal use)
  • emacs - Emacs-style keybindings
  • vscode - VS Code-compatible shortcuts
  • vim - Vim-style modal editing
Switch between maps using View → Keybinding Style or via configuration:

Key Contexts

Keybindings are context-sensitive. The same key can perform different actions depending on where you are:
  • Normal - Default editing context
  • Prompt - When entering text in prompts (file open, search, etc.)
  • Popup - When viewing popups (completions, hover info, etc.)
  • FileExplorer - When the file explorer has focus
  • Menu - When navigating the menu bar

Common Keybindings (Default Map)

This section shows common keybindings from the default map. For platform-specific variations and complete listings, use the in-app Help → Keyboard Shortcuts view.

File Operations

Editing

Search & Replace

Multi-Cursor

Splits & Tabs

View

LSP (Language Server)

File Explorer (when focused)

Customizing Keybindings

Using the Keybinding Editor

The easiest way to customize keybindings:
  1. Open Edit → Keybinding Editor
  2. Search for the action you want to rebind
  3. Click on the keybinding or “Add Binding”
  4. Press the desired key combination
  5. Save changes

Manual Configuration

Edit ~/.config/fresh/config.json:

Keybinding Schema

string
required
The key to bind. Examples: "a", "enter", "f1", "space", "tab", "escape"
string[]
required
Modifier keys. Can include: "ctrl", "shift", "alt", "super" (or "cmd" on macOS)
string
required
The action to execute. See available actions below.
string
Context condition. Values: "normal", "prompt", "popup", "file_explorer", "menu"If omitted, defaults to "normal".
object
Additional arguments for actions that require parameters.

Creating Custom Keybinding Maps

You can create your own keybinding map:

Available Actions

To see all available actions, open the Keybinding Editor and browse the action dropdown, or use the Command Palette (Ctrl+P). Some commonly used actions:
  • save, save_as, open, new, close, quit
  • undo, redo, copy, cut, paste
  • search, replace, find_next, find_previous
  • goto_line, lsp_goto_definition, lsp_references
  • add_cursor_above, add_cursor_below, add_cursor_next_match
  • toggle_comment, format_buffer, delete_line
  • split_horizontal, split_vertical, next_split, prev_split
  • toggle_file_explorer, toggle_line_numbers, toggle_line_wrap

Debugging Keybindings

If a keybinding isn’t working as expected:

Debug Keyboard Events

Use Help → Debug Keyboard Events to see exactly what key codes your terminal sends to Fresh. This helps diagnose:
  • Missing modifier keys
  • Terminal or OS intercepting keys
  • Incorrect escape sequences
Press any key to see its code, modifiers, and event type. Press c to clear history, q or Esc to close.

Input Calibration

Some terminals send non-standard escape sequences. Use View → Calibrate Input to teach Fresh your terminal’s specific key mappings.

Platform Differences

macOS

  • Cmd (⌘) is used instead of Ctrl for many system-wide shortcuts
  • The default macOS keymap automatically adjusts for platform conventions
  • Native menu bar integration provides standard macOS shortcuts

Windows

  • Alt key behavior may differ in Windows Terminal vs other terminals
  • Some Ctrl+Shift combinations may be intercepted by the OS

Linux

  • Terminal emulator differences are most prominent on Linux
  • Use input calibration if your terminal sends unusual sequences
  • GPM (console mouse) is supported on the Linux console

See Also