Smart Tab Navigation
VMark's Tab key is context-aware — it helps you navigate efficiently through formatted text, brackets, and links without reaching for arrow keys.
Quick Overview
| Context | Tab Action |
|---|---|
Inside brackets () [] {} | Jump past closing bracket |
Inside quotes "" '' | Jump past closing quote |
Inside CJK brackets 「」 『』 | Jump past closing bracket |
Inside bold, italic, code, | Jump after the formatting |
| Inside a link | Jump after the link |
| In a table cell | Move to next cell |
| In a list item | Indent the item |
Bracket & Quote Escape
When your cursor is right before a closing bracket or quote, pressing Tab jumps over it instead of inserting spaces.
Supported Characters
Standard brackets and quotes:
- Parentheses:
( ) - Square brackets:
[ ] - Curly braces:
{ } - Double quotes:
" " - Single quotes:
' ' - Backticks:
`
CJK brackets:
- Fullwidth parentheses:
( ) - Lenticular brackets:
【 】 - Corner brackets:
「 」 - White corner brackets:
『 』 - Double angle brackets:
《 》 - Angle brackets:
〈 〉
Curly quotes:
- Double curly quotes:
" " - Single curly quotes:
' '
How It Works
function hello(world|)
↑ cursor before )Press Tab:
function hello(world)|
↑ cursor after )This works with nested brackets too — Tab jumps over the immediately adjacent closing character.
CJK Example
这是「测试|」文字
↑ cursor before 」Press Tab:
这是「测试」|文字
↑ cursor after 」Formatting Escape (WYSIWYG Mode)
In WYSIWYG mode, Tab can escape from inline formatting marks.
Supported Formats
- Bold text
- Italic text
Inline codeStrikethrough- Links
How It Works
When your cursor is anywhere inside formatted text:
This is **bold te|xt** here
↑ cursor inside boldPress Tab:
This is **bold text**| here
↑ cursor after boldLink Escape
Tab also escapes from links:
Check out [VMark|](https://vmark.app)
↑ cursor inside link textPress Tab:
Check out [VMark](https://vmark.app)| and...
↑ cursor after linkLink Navigation (Source Mode)
In Source mode, Tab provides smart navigation within Markdown link syntax.
Nested and Escaped Brackets
VMark handles complex link syntax correctly:
[text [with nested] brackets](url) ✓ Works
[text \[escaped\] brackets](url) ✓ Works
[link](https://example.com/page(1)) ✓ WorksTab navigation correctly identifies link boundaries even with nested or escaped brackets.
Standard Links
[link text|](url)
↑ cursor in textPress Tab → cursor moves to URL:
[link text](|url)
↑ cursor in URLPress Tab again → cursor exits the link:
[link text](url)|
↑ cursor after linkWiki Links
[[page name|]]
↑ cursor in linkPress Tab:
[[page name]]|
↑ cursor after linkSource Mode: Markdown Character Escape
In Source mode, Tab also jumps over Markdown formatting characters:
| Characters | Used For |
|---|---|
* | Bold/italic |
_ | Bold/italic |
^ | Superscript |
~~ | Strikethrough |
== | Highlight |
Example
This is **bold|** text
↑ cursor before **Press Tab:
This is **bold**| text
↑ cursor after **Table Navigation
When cursor is inside a table:
| Action | Key |
|---|---|
| Next cell | Tab |
| Previous cell | Shift + Tab |
| Add row (at last cell) | Tab |
Tab at the last cell of the last row automatically adds a new row.
List Indentation
When cursor is in a list item:
| Action | Key |
|---|---|
| Indent item | Tab |
| Outdent item | Shift + Tab |
Settings
Tab escape behavior can be customized in Settings → Editor:
| Setting | Effect |
|---|---|
| Auto-pair Brackets | Enable/disable bracket pairing and Tab escape |
| CJK Brackets | Include CJK bracket pairs |
| Curly Quotes | Include curly quote pairs ("" '') |
TIP
If Tab escape conflicts with your workflow, you can disable auto-pair brackets entirely. Tab will then insert spaces (or indent in lists/tables) as normal.
Comparison: WYSIWYG vs Source Mode
| Feature | WYSIWYG | Source |
|---|---|---|
| Bracket escape | ✓ | ✓ |
| CJK bracket escape | ✓ | ✓ |
| Curly quote escape | ✓ | ✓ |
| Mark escape (bold, etc.) | ✓ | N/A |
| Link escape | ✓ | ✓ |
Markdown char escape (*, _) | N/A | ✓ |
| Table navigation | ✓ | N/A |
| List indentation | ✓ | ✓ |
| Multi-cursor support | ✓ | ✓ |
Multi-Cursor Support
Tab escape works with multiple cursors — each cursor is processed independently.
How It Works
When you have multiple cursors and press Tab:
- Cursors inside formatting (bold, italic, etc.) escape 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
Example
**bold|** and [link|](url) and plain|
^1 ^2 ^3Press Tab:
**bold**| and [link](url)| and plain|
^1 ^2 ^3Each cursor escapes independently based on its context.
TIP
This is particularly powerful for bulk editing — select multiple occurrences with Mod + D, then use Tab to escape from all of them at once.
Tips
Muscle memory — Once you get used to Tab escape, you'll find yourself navigating much faster without arrow keys.
Works with auto-pair — When you type
(, VMark auto-inserts). After typing inside, just Tab to jump out.Nested structures — Tab escapes one level at a time. For
((nested)), you need two Tabs to fully exit.Shift + Tab — In tables and lists, Shift + Tab moves backward or outdents. In other contexts, it removes leading spaces.
Multi-cursor — Tab escape works with all your cursors simultaneously, making bulk edits even faster.