Multi-Cursor Editing
VMark supports powerful multi-cursor editing in both WYSIWYG and Source modes, allowing you to edit multiple locations simultaneously.
Quick Start
| Action | Shortcut |
|---|---|
| Add cursor at next match | Mod + D |
| Add cursors at all matches | Mod + Shift + L |
| Add/remove cursor at click | Alt + Click |
| Collapse to single cursor | Escape |
TIP
Mod = Cmd on macOS, Ctrl on Windows/Linux Alt = Option on macOS
Adding Cursors
Select Next Occurrence (Mod + D)
- Select a word or place cursor on a word
- Press
Mod + Dto add a cursor at the next occurrence - Press again to add more cursors
- Type to edit all locations at once
count to total: - Double-click
countto select it - Press
Mod + Drepeatedly to select each occurrence - Type
total— all occurrences update simultaneously
Select All Occurrences (Mod + Shift + L)
Select all occurrences of the current word or selection at once:
- Select a word or text
- Press
Mod + Shift + L - All matching occurrences in the current block are selected
- Type to replace all at once
Alt + Click
Hold Alt (Option on macOS) and click to:
- Add a cursor at that position
- Remove a cursor if one already exists there
This is useful for placing cursors at arbitrary positions that aren't matching text.
Editing with Multiple Cursors
Once you have multiple cursors, all standard editing works at each cursor:
Typing
- Characters are inserted at all cursor positions
- Selections are replaced at all positions
Deletion
- Backspace — deletes character before each cursor
- Delete — deletes character after each cursor
Navigation
- Arrow keys — move all cursors together
- Shift + Arrow — extend selection at each cursor
- Mod + Arrow — jump by word/line at each cursor
Tab Escape
Tab escape works independently for each cursor:
- Cursors inside bold, italic,
code, orstrikejump to the end of that formatting - Cursors inside links escape from the link
- Cursors before closing brackets
)]}jump over them - Cursors in plain text stay in place
This lets you escape from multiple formatted regions simultaneously. See Smart Tab Navigation for details.
Clipboard
Copy (Mod + C):
- Copies text from all selections, joined by newlines
Paste (Mod + V):
- If the clipboard has the same number of lines as cursors, each line goes to each cursor
- Otherwise, the full clipboard content is pasted at all cursors
Block Scoping
Multi-cursor operations are scoped to the current block to prevent unintended edits across unrelated sections.
In WYSIWYG Mode
- Cursors cannot cross code block boundaries
- If your primary cursor is inside a code block, new cursors stay within that block
In Source Mode
- Blank lines act as block boundaries
Mod + DandMod + Shift + Lonly match within the current paragraph
This prevents accidentally editing a variable name in unrelated code sections or changing text in different paragraphs that happen to match.
Collapsing Cursors
Press Escape to collapse back to a single cursor at the primary position.
Visual Feedback
- Primary cursor — standard blinking cursor
- Secondary cursors — additional blinking cursors with distinct styling
- Selections — each cursor's selection is highlighted
In dark mode, cursor and selection colors automatically adjust for visibility.
Mode Comparison
| Feature | WYSIWYG | Source |
|---|---|---|
Mod + D | ✓ | ✓ |
Mod + Shift + L | ✓ | ✓ |
Alt + Click | ✓ | ✓ |
| Block scoping | Code fences | Blank lines |
| Wrap-around search | ✓ | ✓ |
Tips & Best Practices
Renaming Variables
- Double-click the variable name
Mod + Shift + Lto select all in the block- Type the new name
Adding Prefixes/Suffixes
- Place cursor before/after repeated text
Mod + Dto add cursors at each occurrence- Type the prefix or suffix
Editing List Items
- Select the common pattern (like
-at line starts) Mod + Shift + Lto select all- Edit all list items at once
When to Use Each Shortcut
| Scenario | Best Shortcut |
|---|---|
| Careful, incremental selection | Mod + D |
| Replace all in block | Mod + Shift + L |
| Arbitrary positions | Alt + Click |
| Quick exit | Escape |
Limitations
- Atom nodes: Cannot place cursors inside images, embedded content, or math blocks in WYSIWYG mode
- IME input: When using input methods (Chinese, Japanese, etc.), composition only affects the primary cursor
- Document-wide: Selections are scoped to blocks, not the entire document
Keyboard Reference
| Action | Shortcut |
|---|---|
| Select next occurrence | Mod + D |
| Select all occurrences | Mod + Shift + L |
| Add/remove cursor | Alt + Click |
| Collapse to single cursor | Escape |
| Move all cursors | Arrow keys |
| Extend all selections | Shift + Arrow |
| Jump by word | Alt + Arrow |
| Jump by line | Mod + Arrow |