Keymaps & keybindings

Editora is keyboard-first, and every action is a command, so the keyboard layer is entirely yours to change.

The five keymaps

Editora ships five complete keymaps, selectable in Settings → Keymaps or with keymap.select:

  • Emacs (default)
  • CUA
  • Sublime Text
  • VS Code
  • IntelliJ IDEA

None of them is modal: they’re different chord-to-command maps over the same command ids, so switching changes accelerators without stranding any feature. Switching is live, with no restart, and every chord hint updates with it: toolbar tooltips, the command palette, tool-window tooltips, and the Welcome shortcuts. Hints are written in the notation of the active keymap and platform: Ctrl+Shift+P, ⇧⌘P, or Emacs notation in the Emacs keymap.

Undo and toggle-comment also have chords that can be typed on keyboards where / is a shifted key: C-x u, C-_, and Ctrl+Shift+7 undo in the Emacs keymap, and Ctrl+Shift+7 or the numpad slash toggle a comment in the other keymaps.

On macOS the non-Emacs keymaps mostly use ⌘ where the keybindings reference shows Ctrl. A few chords differ beyond the modifier, where macOS reserves the obvious one: Replace is ⌥⌘F rather than Ctrl+H in the CUA, Sublime Text and VS Code keymaps, for example. The command palette always shows the chord that applies on your machine. Emacs uses Control on every platform.

Emacs notation reads C- as Ctrl, M- as Alt (Option on macOS) and S- as Shift, and a space separates the steps of a sequence: C-x C-s is Ctrl+X, then Ctrl+S.

Debugger keys

Every keymap binds the debugger’s commands. The Emacs keymap’s are listed under Debugging; besides those, C-c C-d followed by r restarts, v shows the value at the caret, x evaluates, w adds a watch, l lists the breakpoints, m mutes them, t enables or disables the caret line’s breakpoint, s smart-steps into, f restarts the frame and h applies code changes.

The CUA and Sublime Text keymaps use VS Code’s function keys:

KeyAction
F5Start or continue
Shift+F5Stop
Ctrl+Shift+F5Restart
F6Pause (CUA only: in Sublime Text, F6 is spell checking)
F9Toggle breakpoint
F10Step over
F11Step into while the program is paused, otherwise Full Screen
Shift+F11Step out

Because F11 steps into only while a program is paused, Full Screen also has Ctrl+Alt+F in these two keymaps (Ctrl+⌘F on macOS). The VS Code keymap has the same keys, with F11 always Step Into.

The IntelliJ IDEA keymap adds Ctrl+F5 Restart, Alt+F8 Evaluate, Ctrl+Alt+F8 Show Value at Caret, Ctrl+Shift+F9 Breakpoints, Shift+F7 Smart Step Into and Ctrl+F9 Apply Code Changes to its usual debugger keys.

Some debugger keys are the same in every keymap. While the program is paused, Ctrl+Space completes an expression in the evaluate field, a watch prompt and a breakpoint’s condition and log message, and typing . opens the same list. In the value popup of Show Value at Caret, the arrow keys move and unfold, Enter unfolds a row or loads the next page, Shift+Enter adds the row to Watches, Ctrl+C (⌘C on macOS) copies its value and Esc closes the popup. See Inspecting values.

Java chords

The IntelliJ IDEA keymap uses IntelliJ’s chords for the Java tools:

ChordCommand
Alt+EnterQuick fixes
Shift+F6Rename
F2 / Shift+F2Next / previous problem
Ctrl+F1Show problem at caret
Alt+InsertGenerate (New in the Project tree)
Ctrl+O / Ctrl+IOverride / Implement Methods
Ctrl+Alt+L / Ctrl+Alt+OFormat / organize imports
Ctrl+N, Ctrl+Alt+Shift+NGo to Symbol in Workspace
Ctrl+Alt+B / Ctrl+Shift+BGo to implementation / type definition
Ctrl+H / Ctrl+Alt+HType / call hierarchy
Ctrl+PParameter info
Ctrl+Shift+IPeek definition
Ctrl+Shift+TRelated file (test ⇄ class)
Ctrl+Alt+V / C / F / M / P / NExtract variable / constant / field / method, introduce parameter, inline
F6 / Ctrl+F6Move / change signature
Ctrl+Alt+Shift+TRefactor This
Ctrl+Alt+TSurround With
Ctrl+JInsert snippet
Ctrl+Shift+EnterComplete statement
Ctrl+Shift+SpaceSmart Type completion
Ctrl+Alt+Left / RightBack / forward
Ctrl+Shift+F10Run context at caret: the test at the caret (the class above its declaration), else the class’s main, else the file
Ctrl+UGo to super method
Ctrl+Alt+Shift+CCopy fully qualified name (IntelliJ’s Copy Reference)
Ctrl+Alt+F7Find usages
Ctrl+Shift+= / Ctrl+Shift+- (also on the numpad)Expand all / collapse all folds

So in that keymap F2 is no longer Rename, and Alt+Insert is New only in the Project tree; New File elsewhere is Ctrl+Alt+Insert. On macOS the keymap follows IntelliJ’s: ⌘N is Generate in the editor and New in the Project tree, New File is ⌃⌘N, ⌃I is Override/Implement Methods, ⌘J is Insert snippet, ⌃⇧R runs the context at caret, ⌘U goes to the super method, ⌘⇧= / ⌘⇧- expand and collapse all folds, and ⌘[ / ⌘] go back and forward. Text zoom keeps Ctrl+= / Ctrl+- (⌘= / ⌘-). The command palette also finds commands by IntelliJ’s and VS Code’s names for them: Optimize Imports, Show Context Actions, Reformat Code, Find Usages, Go to Test, Copy Reference, Show Call Hierarchy, Find Action, Super Method and others; typed in full, such a name comes first. Menus in this keymap show Alt+Enter for Code Actions. The VS Code keymap binds Ctrl+F12 Go to Implementation, Alt+F12 Peek Definition and Ctrl+T Go to Symbol in Workspace (⌘F12, ⌥F12 and ⌘T on macOS). The default Emacs keymap gathers the language-server commands under a C-c l prefix (C-c l a code actions, C-c l g generate, C-c l t refactor this, C-c l r rename, C-c l f format, C-c l o organize imports, C-c l e problem at caret, C-c l u undo last refactoring, and others), with M-g M-n / M-g M-p for the next and previous problem and M-, / C-M-, for back and forward. Every keymap now binds Back and Forward. The Keybindings page lists them all.

Rebinding commands

The Settings → Keymaps page lists every command with its current chord. Click a row, or move to it with the arrow keys and press Enter, to show its buttons:

  • Record captures a new chord. Multi-key sequences like C-x C-s work. The field shows the chord in the active keymap’s notation (Ctrl+Shift+K, ⇧⌘K, or C-S-k in the Emacs keymap), and so do the question about a clashing chord and the status-bar message. Enter saves it and Esc cancels.
  • Reset restores that command’s default chord. If another command has taken that chord, Editora asks first, because the other command loses it.
  • Remove unbinds the command. Delete or Backspace on a row does the same.
  • Reset all shortcuts clears every override of the keymap in use. Overrides made under another keymap stay with that keymap.

A chord cannot start with a key that types a character, such as a letter, a digit, punctuation or Space with no modifier other than Shift. Bound, that key would run the command everywhere you type, so Editora refuses it and asks you to add Ctrl, Alt or another modifier. When a new chord collides with existing bindings, Editora lists them and asks before binding it.

The Filter commands… field matches every word you type, in any order, so save file finds File: Save. You can also type a chord in any notation: Ctrl+S, C-s, ⇧⌘S or a sequence like Ctrl+K Ctrl+W lists the commands on that chord, written the way the active keymap writes it.

Changes apply live across all windows. Your overrides are saved in settings.json (the keymap name plus per-command entries) and layer on top of the active keymap, so you only store what you change. Overrides are kept per keymap: switching keymap does not unbind unrelated keys, and switching back restores the rebinds you made there. Shortcuts of commands that no keymap binds by default (saved macros, external tools and run configurations) follow you to the new keymap instead. When the new keymap already uses that chord, or the chord would clash with one of its chords, the shortcut stays with the keymap it was made in and comes back when you switch back. Overrides are also stored per platform, since a chord is modifier-specific (⌘ on macOS, Ctrl elsewhere), so a config synced between a Mac and a Windows or Linux machine binds each OS’s own chord instead of both. Settings sync can carry your overrides, for every keymap, to your other computers; which keymap each one uses stays its own.

The reference pages

  • The Commands page lists every command grouped by area, with its description and default chord per keymap.
  • The Keybindings page shows each keymap’s bindings grouped by area, with a tab per keymap.

Limitations

Modal Vim is deferred: the flat chord-to-command resolver can’t express a normal/insert/visual state machine yet.