-
Notifications
You must be signed in to change notification settings - Fork 0
Keyboard Reference
-
Ctrl+pis written as<C-p>inkeys.config. -
Shift+Spaceis written as<S-Space>. - Sequences such as
ggmust be completed within 600 ms. -
m*meansmfollowed by one character.'*means'followed by one character. - Letter and punctuation shortcuts use physical US-key positions where possible, including on non-Latin layouts.
- Bindings use
Ctrl, notCmd/Meta. Alt and Meta/Cmd shortcuts are left to the operating system.
Only the top input context is active. If it has no matching binding, the global map is checked. An active-context binding wins over the same global chord.
Plain one-character shortcuts are ignored while typing in an input, textarea, or editable element. Named keys and Ctrl chords can still dispatch. In dialogs, : and / are deliberately ignored rather than opening global overlays.
| Key | Command ID | Action |
|---|---|---|
<C-b> |
view.toggleTree |
Toggle the file tree |
: |
palette.open |
Open the command palette |
/ |
search.open |
Search the current note |
<C-p> |
document.quickOpen |
Open quick open |
<C-n> |
tree.createNoteAtCurrent |
Create a note beside the current note |
These bindings can work inside other contexts when that context does not claim the same chord and focus is not suppressing it.
| Key | Command ID | Action |
|---|---|---|
j |
document.scrollLineDown |
Scroll down |
k |
document.scrollLineUp |
Scroll up |
h |
document.scrollLeft |
Scroll left |
l |
document.scrollRight |
Scroll right |
<C-d> / Space
|
document.scrollHalfDown |
Scroll half a viewport down |
<C-u> / <S-Space>
|
document.scrollHalfUp |
Scroll half a viewport up |
gg |
document.scrollToTop |
Go to top |
G |
document.scrollToBottom |
Go to bottom |
n |
document.nextMatch |
Next search match |
N |
document.prevMatch |
Previous search match |
s |
caret.toggle |
Enter caret mode |
: |
palette.open |
Open command palette |
/ |
search.open |
Search current note |
o |
document.outline |
Open heading outline |
b |
document.links |
Open links panel |
<C-e> |
editor.open |
Open current note in editor |
= / F9
|
zoom.fitWidth |
Fit document width |
F10 |
zoom.fitContentWidth |
Fit content width |
+ |
zoom.in |
Zoom in |
- |
zoom.out |
Zoom out |
Escape |
document.clearSearch |
Clear search highlight |
| Key | Command ID | Action |
|---|---|---|
j / ArrowDown
|
tree.moveDown |
Select next row |
k / ArrowUp
|
tree.moveUp |
Select previous row |
l / ArrowRight
|
tree.expand |
Expand folder |
h / ArrowLeft
|
tree.collapse |
Collapse folder |
zM |
tree.collapseAll |
Collapse all folders |
zR |
tree.expandAll |
Expand all folders |
gg |
tree.selectFirst |
Select first row |
G |
tree.selectLast |
Select last row |
/ |
tree.openSearch |
Filter the tree |
Enter |
tree.openSelection |
Open selected note or toggle folder |
% |
tree.createNote |
Create note at selected location |
d |
tree.createDirectory |
Create directory at selected location |
R |
tree.rename |
Rename selected entry |
mf |
tree.toggleMark |
Toggle mark |
mu |
tree.clearMarks |
Clear all marks |
mm |
tree.moveMarks |
Move marked entries |
D |
tree.delete |
Move marked or selected entries to trash |
Escape |
tree.close |
Close the tree |
| Key | Command ID | Action |
|---|---|---|
j / ArrowDown / <C-n>
|
tree.moveDown |
Select next result |
k / ArrowUp / <C-p>
|
tree.moveUp |
Select previous result |
Enter |
tree.openSelection |
Open selected note |
Escape |
tree.closeSearch |
Leave tree search |
Backspace |
tree.searchBackspace |
Delete one filter character |
Printable character (* internal wildcard) |
tree.searchAppend |
Add one filter character |
Current caveat: Enter from tree search opens the note but leaves the tree context active. Press Escape to close the remaining tree.
| Key | Command ID | Action |
|---|---|---|
h |
caret.moveLeft |
Previous rendered character |
l |
caret.moveRight |
Next rendered character |
j |
caret.moveDown |
Rendered span below |
k |
caret.moveUp |
Rendered span above |
{ |
caret.paraBackward |
Previous paragraph |
} |
caret.paraForward |
Next paragraph |
gg |
caret.moveToStart |
Document start |
G |
caret.moveToEnd |
Document end |
<C-d> / Space
|
document.scrollHalfDown |
Scroll half a viewport down |
<C-u> / <S-Space>
|
document.scrollHalfUp |
Scroll half a viewport up |
v |
caret.enterVisual |
Enter visual mode |
Enter / gd
|
caret.smartJump |
Follow link under caret |
n |
caret.nextMatch |
Next search match |
N |
caret.prevMatch |
Previous search match |
m* |
caret.setMark |
Set one-letter mark |
'* |
caret.jumpMark |
Jump to one-letter mark |
: |
palette.open |
Open command palette |
/ |
search.open |
Search current note |
o |
document.outline |
Open heading outline |
b |
document.links |
Open links panel |
<C-e> |
editor.open |
Open current note in editor |
Escape |
caret.exit |
Leave caret mode |
= / F9
|
zoom.fitWidth |
Fit document width |
F10 |
zoom.fitContentWidth |
Fit content width |
+ |
zoom.in |
Zoom in |
- |
zoom.out |
Zoom out |
| Key | Command ID | Action |
|---|---|---|
h |
visual.extendLeft |
Extend left |
l |
visual.extendRight |
Extend right |
j |
visual.extendDown |
Extend down |
k |
visual.extendUp |
Extend up |
{ |
visual.extendParaBackward |
Extend to previous paragraph |
} |
visual.extendParaForward |
Extend to next paragraph |
y |
visual.yank |
Copy selection and return to caret mode |
Escape |
visual.exit |
Return to caret mode |
: |
palette.open |
Open command palette |
/ |
search.open |
Search current note |
o |
document.outline |
Open heading outline |
<C-e> |
editor.open |
Open current note in editor |
= / F9
|
zoom.fitWidth |
Fit document width |
F10 |
zoom.fitContentWidth |
Fit content width |
+ |
zoom.in |
Zoom in |
- |
zoom.out |
Zoom out |
| Key | Command ID | Action |
|---|---|---|
Escape |
palette.close |
Close |
Enter |
palette.accept |
Run selected command |
ArrowDown / <C-n>
|
palette.moveNext |
Select next |
ArrowUp / <C-p>
|
palette.movePrevious |
Select previous |
The current-note and vault-search overlays use the same context map.
| Key | Command ID | Action |
|---|---|---|
Escape |
search.close |
Close |
Enter |
search.accept |
Open selected result |
ArrowDown / <C-n>
|
search.moveNext |
Select next |
ArrowUp / <C-p>
|
search.movePrevious |
Select previous |
| Key | Command ID | Action |
|---|---|---|
Escape |
quickOpen.close |
Close |
Enter |
quickOpen.accept |
Open selected note |
ArrowDown / <C-n>
|
quickOpen.moveNext |
Select next |
ArrowUp / <C-p>
|
quickOpen.movePrevious |
Select previous |
| Key | Command ID | Action |
|---|---|---|
Escape |
outline.close |
Close |
Enter |
outline.accept |
Jump to selected heading |
ArrowDown / j
|
outline.moveNext |
Select next |
ArrowUp / k
|
outline.movePrevious |
Select previous |
| Key | Command ID | Action |
|---|---|---|
Escape |
links.close |
Close |
Enter |
links.accept |
Open selected linked note |
ArrowDown / j
|
links.moveNext |
Select next |
ArrowUp / k
|
links.movePrevious |
Select previous |
| Key | Command ID | Action |
|---|---|---|
j / ArrowDown
|
templates.moveNext |
Select next template |
k / ArrowUp
|
templates.movePrevious |
Select previous template |
Enter |
templates.open |
Open template in editor |
R |
templates.rename |
Rename template |
D |
templates.delete |
Move template to trash |
Escape |
templates.close |
Close manager |
These bindings are internal and cannot be remapped.
| Key | Command ID | Action |
|---|---|---|
Escape / <C-b>
|
vaultDialog.cancel |
Cancel |
Enter |
vaultDialog.submit |
Submit |
ArrowDown / <C-n>
|
vaultDialog.next |
Next template choice |
ArrowUp / <C-p>
|
vaultDialog.previous |
Previous template choice |
: / /
|
vaultDialog.ignore |
Do nothing |
Open these with : or bind their IDs in keys.config:
| Command ID | Palette title |
|---|---|
app.openVault |
Open vault |
app.closeVault |
Close vault |
search.openGlobal |
Open vault search |
zoom.fitPage |
Fit one page height |
templates.manage |
Manage note templates |
theme.useSystem |
Use system theme |
theme.useLight |
Use light theme |
theme.useDark |
Use dark theme |
theme.cycle |
Cycle theme |
cache.clearCurrentVault |
Clear current vault cache |
cache.clearApplication |
Clear application cache |
The built-in multi-key forms are:
gg gd zM zR mf mu mm m* '*
The first key begins a pending sequence. If the second key is wrong, folea clears the pending sequence and does not retry that second key as a fresh command. For example, g then j does not run normal j movement.
Runtime sequence support is narrower than keys.config parsing. The first event must be a single character. Forms such as gEnter can work, while Enterg and sequences needing more than one pending prefix do not.
See Configuration: key remapping. Action and navigation commands are remappable. Internal commands, including vaultDialog.* and tree.searchAppend, are fixed.
Evidence for all default tables: src/renderer/input/bindings/keymaps.ts. Command titles and exposure: src/renderer/input/bindings/app.ts, src/renderer/input/bindings/caret.ts, src/renderer/input/bindings/document.ts, src/renderer/input/bindings/overlays.ts, src/renderer/input/bindings/vault.ts, and src/renderer/input/commands.ts. Sequence behavior: src/renderer/input/dispatcher.ts, src/renderer/input/sequence.ts, and tests/unit/input-dispatch.test.ts.