✅ Introduction
Speed commands are single-letter keyboard shortcuts that work when the cursor is positioned at the very beginning (column 0) of a heading line. This feature, borrowed from Emacs org-mode, provides lightning-fast navigation and editing without the need for complex key chords.
✅ What are Speed Commands?
Speed commands transform the beginning of each heading into a powerful command interface. When your cursor is at column 0 of a heading (the first star * in org-mode or the first hash # in markdown), you can press a single key to execute common operations:
Navigation: jump between headings, siblings, parent
Visibility: fold/unfold sections
Structure editing: move, promote, demote, cut, paste
TODO management: cycle states, set priorities
Planning: add schedules and deadlines
Metadata: set tags, properties, effort estimates
Time tracking: clock in and out
Archiving: archive completed tasks
This approach is significantly faster than using traditional keybindings or menu commands for frequent operations.
✅ Why Use Speed Commands?
Efficiency: Single keystrokes instead of multi-key combinations
Contextual: Only active at heading starts, so no conflicts with normal typing
Discoverable: Press ? at a heading start to see all available commands
Emacs-compatible: Familiar workflow for Emacs org-mode users
✅ Configuration
✅ Enabling Speed Commands
Speed commands are enabled by default in Scimax VS Code. To toggle them on or off:
✅ Via Settings UI
Open VS Code Settings (C-, or s-, on Mac)
Search for "speed commands"
Toggle the checkbox for Scimax: Speed Commands > Enabled
✅ Via settings.json
Add or modify this setting in your settings.json:
{
"scimax.speedCommands.enabled": true
}
✅ Via Command Palette
Open Command Palette (C-S-P or s-S-P on Mac)
Type "speed" and select Scimax: Toggle Speed Commands
✅ Supported File Types
Speed commands work in:
Org-mode files (`.org')
Markdown files (`.md', `.markdown')
✅ When Speed Commands are Active
Speed commands are only active when all of the following conditions are met:
Speed commands are enabled in settings (scimax.speedCommands.enabled: true)
Cursor is at column 0 (the very beginning of the line)
Line is a heading (starts with * for org-mode or # for markdown)
No text is selected (cursor position only, not a selection)
✅ Visual Indicator
When speed commands are active, you'll notice that single key presses trigger actions immediately. If speed commands aren't working:
Check that your cursor is at position 0 (before the first * or #)
Ensure no text is selected
Verify the file type is org or markdown
Check settings to confirm speed commands are enabled
✅ Speed Command Reference
This section provides a complete listing of all available speed commands, organized by functional category.
✅ Visibility/Folding Commands
Control how much content is visible in your document.
| Key | Command | Description |
|---|---|---|
| c | Cycle global visibility | Cycle through: overview → contents → show all |
| C | Show all children | Unfold all children of current subtree |
| o | Overview | Fold all headings (show only top-level) |
| Cycle fold at point | Toggle folding of current heading |
✅ Structure Editing Commands
Reorganize and modify your document structure.
| Key | Command | Description |
|---|---|---|
| U | Move subtree up | Move entire subtree (and children) up |
| D | Move subtree down | Move entire subtree (and children) down |
| r | Demote heading | Decrease level of heading only (shift right) |
| l | Promote heading | Increase level of heading only (shift left) |
| R | Demote subtree | Decrease level of subtree (and children) |
| L | Promote subtree | Increase level of subtree (and children) |
| k | Kill (cut) subtree | Cut subtree to clipboard |
| y | Yank (paste) subtree | Paste subtree from clipboard with level adjust |
| w | Refile subtree | Move subtree to another location |
| W | Clone subtree | Duplicate the current subtree |
| m | Mark subtree | Select (highlight) the current subtree |
| @ | Mark subtree (alt) | Select subtree (alternate key) |
| ^ | Sort entries | Sort child entries by various criteria |
✅ Structure Editing Notes
Promote (left) decreases the heading level (fewer stars/hashes)
Demote (right) increases the heading level (more stars/hashes)
Lowercase l/r affect only the heading line
Uppercase L/R affect the entire subtree (heading and children)
`y' (yank) intelligently adjusts heading levels to match context
`k' kills (cuts) the subtree, matching Emacs scimax
`w' refiles the subtree, matching Emacs org-mode
m and @ both mark (select) the subtree
✅ Sorting Entries (^)
The ^ speed command sorts child entries of the current heading. When invoked, it presents a menu of sorting criteria:
| Key | Sort Type |
|---|---|
| a/A | Alphabetically (A = reverse) |
| n/N | Numerically (by leading number) |
| t/T | By timestamp (first in entry) |
| d/D | By DEADLINE date |
| s/S | By SCHEDULED date |
| p/P | By priority ([#A], [#B], [#C]) |
| o/O | By TODO keyword order |
| c/C | By creation time |
| k/K | By total clocked time |
| r/R | By property value (prompts) |
Sorting scope depends on cursor position:
On a heading: Sorts direct children of that heading
With a selection: Sorts entries within the selection
Before first heading: Sorts all top-level entries
✅ TODO and Priority Commands
Manage task states and priorities.
| Key | Command | Description |
|---|---|---|
| t | Cycle TODO state | Cycle through: (none) → TODO → DONE → (none) |
| , | Cycle priority up | Increase priority: C → B → A |
| 1 | Priority [#A] | Set priority to A (highest) |
| 2 | Priority [#B] | Set priority to B (medium) |
| 3 | Priority [#C] | Set priority to C (lowest) |
| 0 | Remove priority | Remove priority marker entirely |
✅ Priority System
Org-mode uses a three-level priority system:
[#A] - High priority (critical, urgent)
[#B] - Medium priority (normal importance)
[#C] - Low priority (nice to have)
Priorities appear after the TODO keyword: ** TODO [#A] Important task
✅ Planning/Timestamp Commands
Add scheduling and deadline information to tasks.
| Key | Command | Description |
|---|---|---|
| s | Add/edit SCHEDULED | Set when you plan to work on this task |
| d | Add/edit DEADLINE | Set when this task must be completed |
| . | Insert timestamp | Insert an inactive timestamp at point |
✅ Timestamp Types
SCHEDULED: When you plan to start working on the task
DEADLINE: When the task must be completed
Plain timestamp: Reference dates, events, notes
✅ Metadata Commands
Add tags, properties, and effort estimates to headings.
| Key | Command | Description |
|---|---|---|
| : | Set tags | Add or modify tags (colon-separated) |
| e | Set effort | Set estimated effort/duration for task |
| P | Set property | Set a custom property in the properties drawer |
✅ Effort Estimates
Effort is stored as a property in H:MM format:
** TODO Write documentation :PROPERTIES: :Effort: 2:00 :END:
Common effort values:
0:15 - 15 minutes
0:30 - 30 minutes
1:00 - 1 hour
2:00 - 2 hours
4:00 - Half day
8:00 - Full day
✅ Properties
Properties are key-value pairs stored in a properties drawer:
** Research Project :PROPERTIES: :CUSTOM_ID: research-2026 :CATEGORY: Research :Effort: 8:00 :ASSIGNED: John Doe :END:
Common property names:
`ID' - Unique identifier
CUSTOM_ID - User-defined ID for linking
`CATEGORY' - Category for agenda display
`Effort' - Estimated effort
`LOGGING' - Log state changes
`COLUMNS' - Column view format
✅ Clocking Commands
Track time spent on tasks.
| Key | Command | Description |
|---|---|---|
| I | Clock in | Start time tracking for current task |
| O | Clock out | Stop time tracking |
✅ Clocking Workflow
Position cursor at column 0 of a task heading
Press `I' to clock in - starts timer
Work on the task
Press `O' to clock out - stops timer and records duration
Clock entries are stored in a :LOGBOOK: drawer:
** TODO Write documentation :LOGBOOK: CLOCK: [2026-01-13 Mon 09:00]--[2026-01-13 Mon 11:30] => 2:30 CLOCK: [2026-01-12 Fri 14:00]--[2026-01-12 Fri 15:45] => 1:45 :END:
✅ Clocking Notes
Only one task can be clocked in at a time
Clocking in a new task automatically clocks out the previous one
Clock duration is automatically calculated
Clock data is used for time reports and agenda views
✅ Archive Commands
Move completed tasks to archive storage.
| Key | Command | Description |
|---|---|---|
| a | Archive subtree | Move subtree to archive file |
| A | Toggle :ARCHIVE: tag | Add/remove ARCHIVE tag (marks for archiving) |
| $ | Archive to sibling | Move subtree under an "Archive" sibling heading |
✅ Archive File
By default, a moves the subtree to a file named {basename}_archive.org:
notes.org → notes_archive.org
projects.org → projects_archive.org
The archived subtree is tagged with :ARCHIVE: and includes metadata:
* DONE Completed project :ARCHIVE: :PROPERTIES: :ARCHIVE_TIME: [2026-01-13 Mon 15:30] :ARCHIVE_FILE: ~/org/projects.org :END:
✅ Tips for Effective Use
✅ Learning the Commands
Start with navigation: n, p, f, b, u are the most frequently used
Use the help: Press ? at any heading start to see all commands
Muscle memory: The keys are mnemonic:
✅ Common Workflows
✅ Quick Task Management
Create heading with C-<return>
Move to beginning of line (`Home' or `C-a')
Press `t' to add TODO state
Press `1' to set high priority
Press `s' to schedule it
Press : to add tags
✅ Organizing Content
Navigate to a heading
Use U/D to reorder siblings
Use l/r to adjust hierarchy
Use `k' to cut and `y' to paste sections
Use `w' to refile sections to another location
Use ^ to sort child entries
Use `a' to archive completed work
✅ Reviewing Documents
Press `o' to see overview (all headings folded)
Use n/p to navigate between sections
Press `Tab' to expand interesting sections
Press `c' to cycle through visibility levels
✅ Combining with Regular Keybindings
Speed commands complement (don't replace) regular keybindings:
Use speed commands for quick operations when cursor is at heading start
Use regular keybindings (`C-c C-t', etc.) when cursor is elsewhere
Use `C-a' or `Home' to quickly jump to column 0 to activate speed commands
✅ Cursor Position Matters
Remember: speed commands only work at column 0. If a speed command doesn't trigger:
Press `Home' or `C-a' to move to beginning of line
Verify you're on a heading line (starts with * or #)
Check that no text is selected
✅ Customization
Currently, speed command keys are pre-defined and cannot be customized. The key mappings follow standard Emacs org-mode conventions for consistency and muscle memory compatibility.
If you need custom keybindings, use VS Code's keybinding system to bind the underlying commands (e.g., `scimax.org.nextHeading', `scimax.org.cycleTodo') to your preferred key combinations.
✅ Reference: All Speed Commands
Complete alphabetical reference of all speed commands.
| Key | Category | Command |
|---|---|---|
| , | TODO | Cycle priority up |
| . | Planning | Insert timestamp |
| 0 | TODO | Remove priority |
| 1 | TODO | Set priority [#A] |
| 2 | TODO | Set priority [#B] |
| 3 | TODO | Set priority [#C] |
| : | Metadata | Set tags |
| ? | Special | Speed commands help |
| @ | Structure | Mark subtree (alt) |
| ^ | Structure | Sort entries |
| $ | Special | Archive to sibling |
| a | Special | Archive subtree |
| A | Special | Toggle :ARCHIVE: tag |
| b | Navigation | Previous sibling |
| c | Visibility | Cycle global visibility |
| C | Visibility | Show all children |
| d | Planning | Add/edit DEADLINE |
| D | Structure | Move subtree down |
| e | Metadata | Set effort |
| f | Navigation | Next sibling |
| g | Navigation | Go to... (submenu) |
| I | Clocking | Clock in |
| j | Navigation | Jump to heading |
| k | Structure | Kill (cut) subtree |
| l | Structure | Promote heading |
| L | Structure | Promote subtree |
| m | Structure | Mark subtree |
| n | Navigation | Next heading |
| N | Special | Narrow to subtree |
| o | Visibility | Overview (fold all) |
| O | Clocking | Clock out |
| p | Navigation | Previous heading |
| P | Metadata | Set property |
| r | Structure | Demote heading |
| R | Structure | Demote subtree |
| s | Planning | Add/edit SCHEDULED |
| S | Special | Widen (show all) |
| t | TODO | Cycle TODO state |
| Visibility | Cycle fold at point | |
| u | Navigation | Parent heading |
| U | Structure | Move subtree up |
| w | Structure | Refile subtree |
| W | Structure | Clone subtree |
| y | Structure | Yank (paste) subtree |
✅ Troubleshooting
✅ Speed Commands Not Working
Verify cursor is at column 0 (before the * or #)
Check file type is `.org' or `.md'
Ensure no text is selected
Verify speed commands are enabled: scimax.speedCommands.enabled: true
Restart VS Code after changing settings
✅ Wrong Command Executes
Press `?' to see command list and verify key mapping
Check for conflicting VS Code keybindings
Ensure you're in an org or markdown file
Update extension to latest version
✅ BibTeX Speed Commands
BibTeX speed commands provide single-key shortcuts for navigating and manipulating BibTeX entries when editing .bib files. These commands are active when the cursor is at column 0 of a line starting with @ (entry definition line).
✅ Activation
BibTeX speed commands are active when:
You are editing a `.bib' file
Cursor is at column 0
Line starts with @ (e.g., @article{, @book{)
Speed commands are enabled in settings
✅ Command Reference
| Key | Category | Command |
|---|---|---|
| n | Navigation | Next entry |
| p | Navigation | Previous entry |
| j | Navigation | Jump to entry (search) |
| s | Formatting | Sort fields in entry |
| d | Formatting | Downcase entry |
| t | Formatting | Title case article title |
| S | Formatting | Sentence case title |
| c | Formatting | Clean/format entry |
| o | Access | Open PDF |
| u | Access | Open URL/DOI |
| N | Access | Open notes |
| g | Access | Google Scholar search |
| x | Access | Open in CrossRef |
| w | Access | Open in Web of Science |
| y | Actions | Copy citation key |
| b | Actions | Copy BibTeX entry |
| k | Actions | Kill (delete) entry |
| K | Actions | Generate citation key |
| ? | Help | Show speed commands help |
✅ Formatting Commands
✅ Sort Fields (s)
Reorders fields in the current entry according to the standard BibLaTeX field order:
author, title, journaltitle/journal, booktitle
editor, edition, volume, number, pages
publisher, location/address, year, date
doi, url, isbn/issn
note, abstract, keywords
✅ Downcase Entry (d)
Converts entry type and field names to lowercase:
Before: @ARTICLE{key, AUTHOR = {Name}}
After: @article{key, author = {Name}}
✅ Title Case (t)
Converts the article title to Title Case, preserving braced content like {DNA} or {LaTeX}.
✅ Sentence Case (S)
Converts the article title to Sentence case (only first letter capitalized), preserving braced content.
✅ Clean Entry (c)
Applies all cleaning operations:
Normalizes whitespace
Downcases entry type and field names
Sorts fields
Removes double braces
✅ Access Commands
✅ Open PDF (o)
Attempts to open the PDF associated with the entry:
Checks the `file' field in the entry
Looks in the configured PDF directory
Offers to open DOI in browser if no PDF found
✅ Open URL/DOI (u)
Opens the URL or DOI associated with the entry:
Prefers DOI if available
Falls back to URL field
Supports arXiv eprint field
✅ Open Notes (N)
Opens or creates notes for the entry. Notes are stored as org files in the configured notes directory.
✅ Google Scholar (g)
Searches Google Scholar for the entry using DOI or title.
✅ CrossRef (x)
Opens the entry in CrossRef search using the DOI.
✅ Web of Science (w)
Opens the entry in Web of Science using the DOI.
✅ Action Commands
✅ Copy Key (y)
Copies the citation key to the clipboard.
✅ Copy BibTeX (b)
Copies the entire BibTeX entry to the clipboard.
✅ Kill Entry (k)
Deletes the entire entry (with confirmation). The deleted entry is copied to the clipboard for easy recovery.
✅ Generate Citation Key (K)
Generates a standardized citation key from the entry's author and year fields. Offers multiple format options:
lastname-year(e.g.,smith-2020)lastname-titleword-year(e.g.,smith-machine-2020)lastname-titlewords-year(e.g.,smith-machine-learning-2020)
Features:
Extracts first author's last name from various formats ("John Smith", "Smith, John")
Removes stop words from title (the, a, an, using, novel, etc.)
Checks for uniqueness against all other entries in the file
Adds suffix (a, b, c) if key already exists
Shows quick pick menu to choose format
Example:
Before: @article{ABC123,
author = {John Smith and Jane Doe},
title = {Machine Learning for Science},
year = {2020}
}
After: @article{smith-2020, (or smith-machine-2020, smith-machine-learning-2020)
✅ Help Command
✅ Show Help (?)
Displays a quick pick menu with all available BibTeX speed commands. Select a command to execute it.
✅ Configuration
BibTeX speed commands use the same enable/disable setting as org-mode speed commands:
{
"scimax.speedCommands.enabled": true
}
For PDF and notes access, configure:
{
"scimax.ref.pdfDirectory": "~/Papers",
"scimax.ref.notesDirectory": "~/Notes/papers"
}
✅ Comparison with Emacs org-ref
These BibTeX speed commands are inspired by the functions in Emacs org-ref-bibtex.el:
| Scimax | Emacs org-ref Function |
|---|---|
| n | org-ref-bibtex-next-entry |
| p | org-ref-bibtex-previous-entry |
| s | org-ref-sort-bibtex-entry |
| d | org-ref-downcase-bibtex-entry |
| t | org-ref-title-case-article |
| S | org-ref-sentence-case-article |
| c | org-ref-clean-bibtex-entry |
| o | org-ref-open-bibtex-pdf |
| u | org-ref-open-in-browser |
| N | org-ref-open-bibtex-notes |
| g | org-ref-bibtex-google-scholar |
| x | org-ref-bibtex-crossref |
| w | org-ref-bibtex-wos |
✅ See Also
✅ External Resources
✅ Implementation Details
Speed commands are implemented in:
/src/org/speedCommands/ - Core implementation for org/markdown
/src/references/bibtexSpeedCommands.ts - BibTeX speed commands