Introduction
This document provides a comprehensive reference for all keybindings in Scimax VS Code. The extension brings Emacs-style org-mode functionality to Visual Studio Code, with keybindings designed to match the familiar Emacs Scimax experience.
Note for Mac Users: On macOS, most keybindings use Ctrl (not Cmd) to match Emacs conventions, except where explicitly noted with alternative Mac bindings.
Global Commands
| Key | Action |
|---|---|
| C-S-j | Open today's journal entry |
| s-S-j | (Mac) Open today's journal entry |
| C-c m | Show Hydra main menu |
| C-c C-m | Show Hydra context menu |
| C-c d d | Show database hydra menu |
| C-c d ? | All database commands |
| C-c c | Quick capture |
| C-c t | Quick capture TODO |
| C-M-v | Show database menu |
| C-s-v | (Mac) Show database menu |
| C-S-r | Reload window |
| s-S-r | (Mac) Reload window |
| M-[ | Previous journal entry (in journal) |
| M-] | Next journal entry (in journal) |
| C-c S-/ | Context-sensitive help |
| C-c S-g | Show link graph for current file |
| C-c S-c | Contacts: insert, email, add note |
Journal
Journal commands live under the M-j (Option-J on Mac) prefix and work from
anywhere, not only inside a journal file. Press M-j ? to pick from a list if
you forget a key.
| Key | Action |
|---|---|
| M-j j | Today's entry |
| M-j y | Yesterday's entry |
| M-j m | Tomorrow's entry |
| M-j d | Go to a date (calendar picker) |
| M-j p | Previous entry (in a journal file) |
| M-j n | Next entry (in a journal file) |
| M-j e | New entry for a chosen date and template |
| M-j l | Quick log entry in today's journal |
| M-j t | Insert timestamp |
| M-j s | Search the journal |
| M-j w | This week's entries |
| M-j c | Journal calendar panel |
| M-j ? | List the journal commands |
โ Help Commands
Emacs-style help commands for discovering keybindings and commands.
| Key | Action |
|---|---|
| C-h k | Describe key - type a key sequence to see its command |
| C-h b | List keybindings - browse all keybindings |
| C-h f | Describe command - select a command to see its keys |
| C-h v | Describe variable - view setting details |
| C-h a | Apropos - search documentation for keywords |
C-h k (Describe Key)
Type a key sequence using either Emacs notation (C-c C-c, M-x) or VS Code notation (ctrl+c ctrl+c, alt+x) to see what command it is bound to. Shows the command ID, title, and any context conditions (when clause).
C-h b (List Keybindings)
Browse all scimax keybindings in a searchable list. Filter by typing to find keybindings. Select an entry to see full details or execute the command.
C-h f (Describe Command)
Search for a command by name and see its keybindings. Useful when you know what you want to do but not the keybinding.
C-h v (Describe Variable/Setting)
Browse all scimax settings with completion. Shows the setting type, default value, current value, and description. Actions include opening VS Code Settings to modify the value.
C-h a (Apropos)
Search the documentation for keywords. Enter one or more search terms to find relevant documentation sections. Results are ranked by relevance:
Heading matches score highest
Command and keybinding mentions score high
Keyword and content matches score lower
Select a result to see details or open the documentation file at that location.
โ Emacs-Style Editor Keybindings
| Key | Action |
|---|---|
| M-x | Show command palette |
| C-x C-f | Quick open file |
| C-x d | Open Dired (directory editor) |
| C-x v v | VC next action (add, commit, sync) |
| C-x v p | VC push |
| C-x C-s | Save file |
| C-x s | Save all files |
| C-x k | Close active editor |
| C-x b | Fuzzy-pick recent org/md file |
| C-x 3 | Split editor right |
| C-x 2 | Split editor down |
| C-x 1 | Make this the only window |
| C-x 0 | Close all editors |
| C-x o | Focus next editor group |
| C-x 5 f | Find file in a new window |
| C-x 5 C-f | Find file in a new window |
| C-x 5 b | Recent file in a new window |
| C-x 5 d | Dired in a new window |
| C-x 5 2 | Current file in a new window |
| C-x 5 c | Current file in a new window |
| C-x 5 0 | Close this window |
| C-x 5 o | Switch to another window |
| C-x | Previous editor |
| C-x | Next editor |
| C-x C- | Navigate back |
| C-x C- | Navigate forward |
| C-/ | Undo |
| C-y | Yank from kill ring |
| M-y | Yank pop / browse kill ring |
| C-w | Kill region (with selection) |
| M-w | Copy region to kill ring |
| C-; | Toggle comment |
| M-; | DWIM comment (org/md, toggle =# =) |
| M-c | Capitalize word and move next |
| M-l | Lowercase word and move next |
| M-u | Uppercase word and move next |
| M-< | Beginning of buffer |
| M-> | End of buffer |
| M-S-% | Query replace (interactive) |
| C- | Delete word left |
Note for macOS: Alt+u, Alt+c, and Alt+l are "dead keys" that insert accents (ยจ, รง, etc.) by default. To use these keybindings, disable the accent menu:
defaults write -g ApplePressAndHoldEnabled -bool false
Then restart VS Code.
Version Control (C-x v)
| Key | Command | Action |
|---|---|---|
| C-x v v | scimax.vc.nextAction | Next logical step: register, commit, resolve, sync |
| C-x v p | scimax.vc.push | Push the current branch |
| C-x v P | scimax.vc.pull | Pull the current branch |
| C-x v t | scimax.vc.status | Status (edamagit if installed, else Source Control) |
| C-x v d | scimax.vc.dir | Changed files in dired (vc-dir) |
| C-x v = | scimax.vc.diff | Diff file against HEAD |
| C-x v l | scimax.vc.log | File history |
| C-x v u | scimax.vc.revert | Discard changes to the file |
| C-x v g | scimax.vc.annotate | Toggle blame |
| C-x v i | scimax.vc.ignore | Add the file to .gitignore |
| C-x v m | scimax.hydra.vc | Version Control menu |
| C-c C-c | scimax.vc.logFinish | In a vc-log buffer: commit |
| C-c C-k | scimax.vc.logCancel | In a vc-log buffer: cancel |
In dired the C-x v commands act on the marked files (in the Explorer, on the
selected files). Dired also marks by git state, and the changed-files list
(C-x v d) has single keys:
| Key | Where | Action |
|---|---|---|
| * e / * ? / * c | dired, vc-dir | Mark edited / untracked / conflicted files |
| M | dired, vc-dir | Mark files in the same git state as this one |
| v = l s G P + | vc-dir | Next action, diff, log, stage, ignore, push, pull |
| ^ | vc-dir | Back to dired at the repository root |
Merge conflicts (smerge mode): single keys at the start of a conflict marker
line, or the same keys after C-c ^ anywhere in a file with conflicts.
| Key | Command | Action |
|---|---|---|
| n / C-c ^ n | scimax.smerge.next | Next conflict |
| p / C-c ^ p | scimax.smerge.previous | Previous conflict |
| m / C-c ^ m | scimax.smerge.keepMine | Keep mine |
| t / C-c ^ t | scimax.smerge.keepTheirs | Keep theirs |
| b / C-c ^ b | scimax.smerge.keepBoth | Keep both |
| B / C-c ^ B | scimax.smerge.keepBase | Keep the base (diff3) |
| M / C-c ^ M | scimax.smerge.keepAllMine | Keep mine in all conflicts |
| T / C-c ^ T | scimax.smerge.keepAllTheirs | Keep theirs in all conflicts |
| RET / C-c ^ RET | scimax.smerge.keepCurrent | Keep the side at the cursor |
| = / C-c ^ = | scimax.smerge.compare | Compare mine and theirs |
| e / C-c ^ e | scimax.smerge.mergeEditor | 3-way merge editor |
| ? / C-c ^ ? | scimax.smerge.menu | Conflicts menu |
See Version Control.
Headings
| Key | Action |
|---|---|
| M- | Promote heading/subtree |
| M- | Demote heading/subtree |
| M-S- | Promote subtree (not in table) |
| M-S- | Demote subtree (not in table) |
| M- | Move heading/subtree up |
| M- | Move heading/subtree down |
| C- | Insert new heading |
| s- | (Mac) Insert new heading |
| C-c @ | Mark (select) subtree |
| C-c C-x t | Insert inline task |
| C-c C-x i | Add ID to heading |
| C-c x p | Set property (fuzzy-match name/value) |
| C-c C-q | Set tags (pick from tags in use) |
| C-c C-c | Set tags (on the headline line) |
| C-c C-w | Refile subtree to target |
| C-c M-w | Copy subtree to refile target |
Items
| Key | Action |
|---|---|
| C-c C-t | Cycle TODO state |
| C-c C-c | Toggle checkbox (not in src block) |
| C-c C-d | Set a DEADLINE on the heading |
| C-c C-s | Set SCHEDULED on the heading |
Timestamps
| Key | Action |
|---|---|
| C-c . | Insert timestamp |
| C-c , | Insert inactive timestamp |
| C-c C-r | Add repeater to timestamp |
| S- | Shift timestamp up |
| S- | Shift timestamp down |
| S- | Shift timestamp left (no selection) |
| S- | Shift timestamp right (no selection) |
Note: S-
Tables
| Key | Action |
|---|---|
| C-c \vert | Create table |
| C-c S-\ | Create table (alternative) |
| C-c - | Insert table separator row |
| C-c ^ | Sort table by column |
| C-c S-6 | Sort table by column (alt) |
| C-c C-c | Align table (in a table row) |
| C-c C-c | Recalculate table (on TBLFM line) |
| C-c * | Recalculate table (alternative) |
| C-c S-8 | Recalculate table (alt) |
| C-c C-e t | Export table |
| M- | Insert row below |
| M-S- | Insert row above |
| M-S- | Insert row above (alt) |
| M-S- | Insert row below (alt) |
| M-S- | Delete row |
| M-S- | Insert column right (in table) |
| M-S- | Delete column (in table) |
| S- | Move row up |
| S- | Move row down |
| S- | Move column left |
| S- | Move column right |
| C-M- | Move cell up (swap) |
| C-M- | Move cell down (swap) |
| C-M- | Move cell left (swap) |
| C-M- | Move cell right (swap) |
Source Blocks (Babel)
Execution
| Key | Action |
|---|---|
| C- | Execute source block |
| s- | (Mac) Execute source block |
| C-c C-c | Execute source block (in src block) |
| S- | Execute and move to next block |
In a Quarto (.qmd) chunk, C-c C-c runs the chunk with the Quarto
extension's Run Cell, and C-<return>, s-<return> and S-<return> are left to
Quarto's own run commands. Cmd+Shift+V (Ctrl+Shift+V) in a .qmd file opens
Quarto's preview (quarto.preview), the same as Cmd+Shift+K. See Quarto Documents.
Advanced Babel Operations
| Key | Action |
|---|---|
| C-c C-v t | Tangle source blocks |
| C-c C-v P | Execute all blocks to point |
| C-c C-v i | Execute inline code |
| C-c C-v q | Queue block for execution |
Export
| Key | Action |
|---|---|
| C-c C-e | Export dispatcher (show menu) |
| C-c C-e h h | Export to HTML |
| C-c C-e h o | Export to HTML and open |
| C-c C-e h p | Open the live org preview |
| C-c C-e l l | Export to LaTeX |
| C-c C-e l o | Export to LaTeX and open |
| C-c C-e l p | Export to PDF |
| C-c C-e l v | Open LaTeX preview |
| C-c C-e l s | LaTeX forward sync |
| C-c C-e m m | Export to Markdown |
| C-c C-e m s | Export to Marp slides |
| C-c C-e m S | Export to Marp slides and open |
| C-c C-e m p | Export to Marp slides and present |
In a Marp deck (Markdown with marp: true), C-c C-e opens the Marp slide
export menu instead (PDF, PowerPoint, Google Slides, HTML, images). There
C-c C-e x presents the deck as a slideshow, C-c C-e c presents from the
current slide, and C-c C-e ? opens Marp help. Cmd+Shift+V (Ctrl+Shift+V) opens the Slide Sorter in place
of the Markdown preview; Cmd+K V still opens the Markdown preview beside the
editor. C-c C-c in a ```python run cell of a deck runs it in a Python panel
beside the editor. See Exporting Slides, Slideshow and Running cells in VS Code.
Org Preview
Like the Markdown preview, but for org files. See Org Preview.
| Key (macOS) | Key (Windows/Linux) | Where | Action |
|---|---|---|---|
| Cmd+Shift+V | Ctrl+Shift+V | Org editor | Open preview in this group |
| Cmd+K V | Ctrl+C Shift+V | Org editor | Open preview to the side |
| Cmd+Shift+V | Ctrl+Shift+V | Org preview | Back to the org source |
Links
| Key | Action |
|---|---|
| C-c C-l | Insert link, or edit the link at point |
| C-c C-o | Open link, or the hashtag at point |
| C-c # | Insert a hashtag, with completion |
| Tab | After # or #ta: complete hashtags |
| Open link (when on link) | |
| F10 | Insert screenshot |
| C-c C-x C-v | Toggle inline image thumbnails in file |
Note: On macOS, F10 requires screen recording permission. See Inserting Screenshots.
LaTeX Previews
Inline previews of math fragments, like org's org-latex-preview. See Inline Previews.
| Key | Action |
|---|---|
| C-c C-x C-l | Toggle the preview at point, or the region's or section's |
| C-u C-c C-x C-l | Remove the previews in the section (or region) |
| C-u C-u C-c C-x C-l | Preview every fragment in the file |
| C-u C-u C-u C-c C-x C-l | Remove every preview in the file |
Citations & References
| Key | Action |
|---|---|
| C-c ] | Insert citation |
| C-c z | Insert citation from Zotero |
| C-u C-c ] | Insert cross-reference |
| S- | Transpose citation left (on citation) |
| S- | Transpose citation right (on citation) |
| S- | Sort citations (on citation) |
| S- | Sort citations by year (on citation) |
| C-S-k | Delete citation (on citation) |
| s-S-k | (Mac) Delete citation |
Text Markup
| Key | Alt Key (Mac: C-M) | Action |
|---|---|---|
| C-c b | M-b (C-M-b) | Bold |
| C-c i | M-i (C-M-i) | Italic |
| C-c _ | M-u (C-M-u) | Underline |
| C-c ` | M-c (C-M-c) | Code (inline) |
| C-c = | M-v (C-M-v) | Verbatim |
| C-c + | M-x (C-M-x) | Strikethrough |
| M-- (C-M--) | Subscript | |
| M-= (C-M-=) | Superscript | |
| C-c ' | Command (Emacs-style, non-standard) |
Note: On macOS, use Ctrl+Option (C-M-) for markup shortcuts since plain Option inserts special characters. On Windows/Linux, plain Alt (M-) works.
Slide Sorter
Keys that work while the Slide Sorter has focus. They
are handled by the sorter, so they do not appear in Keyboard Shortcuts. Use
Ctrl in place of Cmd on Windows and Linux. See Editing Slides.
| Key | Action |
|---|---|
| Left / Right | Select previous / next slide |
| Up / Down | Select the slide a row up / down (previous / next in one column) |
| Shift + arrow keys | Extend the selection |
| Home / End | Select first / last slide |
| Cmd+A | Select all slides |
| Enter | Go to the slide's source |
| Cmd+X / Cmd+C | Cut / copy slides |
| Cmd+V / Cmd+Alt+V | Paste slides after / before |
| Cmd+Enter | Insert new slide after |
| Cmd+Shift+Enter | Insert new slide before |
| Cmd+D | Duplicate slides |
| Alt+Up / Alt+Down | Move slides up / down (also Alt+Left / Alt+Right) |
| H | Hide or unhide slides |
| Delete / Backspace | Delete slides |
| Cmd+Z / Cmd+Shift+Z, Cmd+Y | Undo / redo in the editor |
| + / - / 0 | Larger / smaller / default thumbnails |
| V | Switch between the grid and one slide (the slide preview) |
| Left / Right in slide mode | Previous / next slide (also Up / Down, Page Up / Down, Space) |
Edit Marks (Track Changes)
| Key | Action |
|---|---|
| C-c e i | Mark insertion |
| C-c e d | Mark deletion |
| C-c e c | Add comment |
| C-c e t | Mark typo |
| C-c e a | Accept edit mark |
| C-c e r | Reject edit mark |
| C-c e ] | Next edit mark |
| C-c e [ | Previous edit mark |
| C-c e s | Show edit marks summary |
Mark Ring (Emacs-style)
Emacs-style mark and region commands.
| Key | Action |
|---|---|
| C-Space | Set mark at point |
| C-g | Cancel selection |
| C-c Space | Push mark to ring |
| C-u C-Space | Pop mark from local ring |
| Ctrl+U Ctrl+Space | Pop from local ring (alt) |
| C-x C-Space | Pop mark from global ring |
| Ctrl+X Ctrl+Space | Pop from global ring (alt) |
| C-x C-x | Exchange point and mark |
| C-c M | Show mark ring |
Kill Ring (Emacs-style)
Kills and copies go onto a kill ring as well as the system clipboard, so you can yank older kills, not just the last one. See Kill Ring commands for details.
| Key | Action |
|---|---|
| C-y | Yank the current kill |
| M-y | After C-y: replace it with the next older kill (repeatable) |
| M-y | Otherwise: pick a kill from the ring to insert |
| C-w | Kill region |
| M-w | Copy region to the kill ring |
| C-k | Kill to end of line (repeated C-k joins into one kill) |
Rectangle Commands (Emacs-style)
Emacs-style rectangle editing commands. A rectangle is defined by the column range and line range of the current selection.
| Key | Action |
|---|---|
| C-x r k | Kill rectangle (save to rect clip) |
| C-x r M-w | Copy rectangle (no delete) |
| C-x r d | Delete rectangle (no save) |
| C-x r y | Yank rectangle at point |
| C-x r o | Open rectangle (insert blank space) |
| C-x r c | Clear rectangle (replace with spaces) |
| C-x r S-n | Number lines in rectangle |
| C-x r t | String rectangle (replace with text) |
Note: The rectangle clipboard is separate from the system clipboard, matching Emacs behavior. Kill/copy saves to the rectangle clipboard; yank inserts from it.
Speed Commands
Speed commands are single-key shortcuts available when the cursor is at the beginning of a heading (the first character of the heading line). They must be enabled in settings (scimax.speedCommands.enabled).
Visibility Speed Commands
| Key | Action |
|---|---|
| Toggle fold (same as regular tab) | |
| c | Cycle global fold |
| C | Show children only |
| o | Overview (collapse all) |
| 1 | Show level 1 headings |
| 2 | Show level 2 headings |
| 3 | Show level 3 headings |
| 0 | Show all headings |
| N | Narrow to subtree |
| S | Widen (unfold all) |
Structure Editing Speed Commands
| Key | Action |
|---|---|
| l | Promote heading only |
| r | Demote heading only |
| L | Promote subtree |
| R | Demote subtree |
| U | Move subtree up |
| D | Move subtree down |
"TODO" & Content Speed Commands
| Key | Action |
|---|---|
| t | Cycle TODO state |
| d | Insert DEADLINE |
| s | Insert SCHEDULED |
| e | Set effort estimate |
| : | Set tags |
| P | Set property |
| I | Clock in |
| O | Clock out |
Editing Speed Commands
| Key | Action |
|---|---|
| k | Kill (cut) subtree |
| y | Yank (paste) subtree |
| w | Refile subtree |
| W | Clone subtree |
| m | Mark (select) subtree |
| @ | Mark subtree (alt) |
| ^ | Sort entries |
| a | Archive subtree |
| A | Toggle archive tag |
| $ | Archive to sibling |
| E | Email heading (org) |
Other Speed Commands
| Key | Action |
|---|---|
| ? | Show speed commands help |
| / | Show speed commands help |
โ BibTeX Speed Commands
Speed commands for BibTeX files, active at column 0 of @entry lines (e.g., @article{, @book{).
โ Formatting
| Key | Action |
|---|---|
| s | Sort fields |
| d | Downcase entry |
| t | Title case title |
| S | Sentence case title |
| c | Clean/format entry |
โ Wrap/Strip Braces (Case Protection)
| Key | Action |
|---|---|
| C-S-] | Wrap selection or word at cursor in braces |
| C-S-[ | Strip braces from selection or word |
Wraps text in {} for case protection in BibTeX titles (e.g., {NASA}, {Python}). Works anywhere in the file, not just at entry start.
โ Access
| Key | Action |
|---|---|
| o | Open PDF |
| u | Open URL/DOI |
| N | Open notes |
| g | Google Scholar |
| x | CrossRef |
| w | Web of Science |
โ OpenAlex Integration
| Key | Action |
|---|---|
| C | Show citing works (OpenAlex) |
| R | Show related works (OpenAlex) |
| r | Show references (OpenAlex) |
โ Actions
| Key | Action |
|---|---|
| y | Copy citation key |
| b | Copy BibTeX entry |
| B | Strip braces from entry |
| k | Delete entry |
| K | Generate citation key |
| U | Update from web |
| N | Open notes for entry |
| A | Toggle journal abbreviation |
| ? | Show help |
โ Toggle Speed Commands
| Key | Action |
|---|---|
| C-c C-x s | Toggle speed commands on/off |
โ Additional Notes
Context-Dependent Keybindings
Many keybindings are context-aware and behave differently depending on cursor position:
C-c C-c toggles checkboxes normally, sets tags on a headline line (like C-c C-q; on a statistics cookie it updates the cookie instead), executes source blocks inside code blocks, aligns a table in a table row, recalculates tables on TBLFM lines, and runs a Marp deck's
```python runcell in the Python panelS-
keys modify timestamps normally, but transpose/sort citations when on a citation M-S-
/M-S- promote/demote subtrees normally, but delete/insert columns when in a table opens links when cursor is on a link
โ When Conditions
Some keybindings only work in specific contexts:
Org-mode/Markdown files: Most document structure commands
On headings: Folding, promotion, demotion
In tables: Table-specific commands
In source blocks: Block execution
At heading start: Speed commands
โ Mac vs Windows/Linux
Most keybindings use C- (Ctrl) on all platforms to match Emacs conventions. Exceptions where Mac uses s- (Cmd):
s-S-j (journal)
s-
(execute/insert heading) s-S-k (delete citation)
s-S-r (reload window)
C-s-v (database menu)
โ Quick Reference Card
โ Most Common Commands
| Command | Keybinding |
|---|---|
| Open journal | C-S-j |
| Execute code block | C- |
| Cycle TODO | C-c C-t |
| Insert timestamp | C-c . |
| Insert link | C-c C-l |
| Insert citation | C-c ] |
| Export dispatcher | C-c C-e |
| Jump to heading | C-c C-j |
| Fuzzy search | C-c s |
| Hydra menu | C-c m |
โ Most Common Speed Commands
| Speed Key | Action |
|---|---|
| n/p | Next/Previous heading |
| f/b | Forward/Back sibling |
| u | Up to parent |
| j | Jump to heading |
| t | Cycle TODO |
| l/r | Promote/Demote heading |
โ Further Help
Use C-c m to open the Hydra menu for guided command discovery
Use M-x to search all commands by name
Enable speed commands help with ? when at heading start
See Documentation Index for comprehensive guides