Skip to content

智能 Tab 导航 ​

VMark 的 Tab 和 Shift+Tab 键具有上下文感知能力——可帮助你高效地在格式化文本、括号和链接之间导航,无需使用方向键。

启用实验性的工作区导轨后,标签页循环切换和标签栏只涵盖当前活动工作区的标签页。

快速概览 ​

上下文Tab 操作Shift+Tab 操作
在括号 () [] {} 内跳过闭合括号跳到开括号之前
在引号 "" '' 内跳过闭合引号跳到开引号之前
在中日韩括号 「」 『』 内跳过闭合括号跳到开括号之前
在 粗体、斜体、代码、删除线内跳到格式标记之后跳到格式标记之前
在链接内跳到链接之后跳到链接之前
在表格单元格中移动到下一个单元格移动到上一个单元格
在列表项中缩进该项取消缩进该项(在最外层停止)

括号与引号跳出 ​

当光标紧靠在闭合括号或引号之前时,按 Tab 可跳过它。当光标紧靠在开括号或引号之后时,按 Shift+Tab 可跳回到它之前。

支持的字符 ​

标准括号和引号:

  • 圆括号:( )
  • 方括号:[ ]
  • 花括号:{ }
  • 双引号:" "
  • 单引号:' '
  • 反引号:`

中日韩括号:

  • 全角圆括号:( )
  • 方头括号:【 】
  • 角括号:「 」
  • 白角括号:『 』
  • 双书名号:《 》
  • 书名号:〈 〉

弯引号:

  • 双弯引号:" "
  • 单弯引号:' '

工作原理 ​

text
function hello(world|)
                    ↑ cursor before )

按 Tab:

text
function hello(world)|
                     ↑ cursor after )

嵌套括号同样有效——Tab 只跳过紧邻的闭合字符。

按 Shift+Tab 执行反向操作——如果光标紧靠在开括号之后:

text
function hello(|world)
               ↑ cursor after (

按 Shift+Tab:

text
function hello|(world)
              ↑ cursor before (

中日韩示例 ​

text
这是「测试|」文字
         ↑ cursor before 」

按 Tab:

text
这是「测试」|文字
          ↑ cursor after 」

格式标记跳出(所见即所得模式) ​

在所见即所得模式中,Tab 和 Shift+Tab 可以跳出内联格式标记。

支持的格式 ​

  • 粗体 文本
  • 斜体文本
  • 内联代码
  • 删除线
  • 链接

工作原理 ​

当光标位于格式化文本内的任意位置时:

text
This is **bold te|xt** here
                 ↑ cursor inside bold

按 Tab:

text
This is **bold text**| here
                     ↑ cursor after bold

Shift+Tab 执行反向操作——跳到格式标记的开始处:

text
This is **bold te|xt** here
                 ↑ cursor inside bold

按 Shift+Tab:

text
This is |**bold text** here
        ↑ cursor before bold

链接跳出 ​

Tab 和 Shift+Tab 也可以从链接中跳出:

text
Check out [VMark|](https://vmark.app)
               ↑ cursor inside link text

按 Tab:

text
Check out [VMark](https://vmark.app)| and...
                                    ↑ cursor after link

在链接内按 Shift+Tab 移动到开始处:

text
Check out |[VMark](https://vmark.app) and...
          ↑ cursor before link

链接导航(源码模式) ​

在源码模式中,Tab 在 Markdown 链接语法内提供智能导航。

嵌套与转义括号 ​

VMark 能正确处理复杂的链接语法:

markdown
[text [with nested] brackets](url)     ✓ Works
[text \[escaped\] brackets](url)       ✓ Works
[link](https://example.com/page(1))    ✓ Works

Tab 导航能正确识别链接边界,即使存在嵌套或转义括号。

标准链接 ​

markdown
[link text|](url)
          ↑ cursor in text

按 Tab → 光标移动到 URL:

markdown
[link text](|url)
            ↑ cursor in URL

再按 Tab → 光标退出链接:

markdown
[link text](url)|
                ↑ cursor after link

Wiki 链接 ​

markdown
[[page name|]]
           ↑ cursor in link

按 Tab:

markdown
[[page name]]|
             ↑ cursor after link

源码模式:Markdown 字符跳出 ​

在源码模式中,Tab 也可以跳过 Markdown 格式字符:

字符用途
*粗体/斜体
_粗体/斜体
^上标
~~删除线(作为整体跳过)
==高亮(作为整体跳过)

示例 ​

markdown
This is **bold|** text
              ↑ cursor before **

按 Tab:

markdown
This is **bold**| text
                ↑ cursor after **

INFO

源码模式不支持 Shift+Tab 跳出 Markdown 字符——Shift+Tab 在源码模式中只执行取消缩进(删除前导空格)。

源码模式:自动配对 ​

在源码模式中,输入格式字符会自动插入对应的闭合字符:

字符配对行为
**|* 或 **|**延迟触发——等待 150ms 以判断是单个还是双个
~~|~ 或 ~~|~~延迟触发
__|_ 或 __|__延迟触发
===|==始终配对为双个
``|`单个反引号在延迟后配对
```代码围栏行首三个反引号创建围栏代码块

在围栏代码块内,自动配对 禁用——在代码块中输入 * 会插入字面量 *,不进行配对。

在配对之间按 Backspace 会同时删除两个字符:*\|* → Backspace → 空。

表格导航 ​

当光标在表格内时:

操作按键
下一个单元格Tab
上一个单元格Shift + Tab
添加行(在最后一个单元格时)Tab

在最后一行的最后一个单元格按 Tab 会自动添加新行。

列表缩进 ​

当光标在列表项中时:

操作按键
缩进项目Tab
取消缩进项目Shift + Tab

取消缩进会移除一层嵌套,并在最外层停止——它不会把项目移出列表。如需完全离开列表,请使用 移除列表,或再次按下列表按钮将其关闭。

设置 ​

Tab 跳出行为可在 设置 → 编辑器 中自定义:

设置效果
自动配对括号启用/禁用括号配对和 Tab 跳出
中日韩括号包含中日韩括号对
弯引号包含弯引号对(“” ‘’);输入的直引号会变成一对弯引号

TIP

如果 Tab 跳出与你的工作流冲突,可以完全禁用自动配对括号。这样 Tab 就会正常插入空格(或在列表/表格中执行缩进)。

对比:所见即所得模式与源码模式 ​

功能Tab(所见即所得)Shift+Tab(所见即所得)Tab(源码)Shift+Tab(源码)
括号跳出✓✓✓—
中日韩括号跳出✓✓✓—
弯引号跳出✓✓✓—
格式标记跳出(粗体等)✓✓N/AN/A
链接跳出✓✓✓(字段导航)—
Markdown 字符跳出(*、_、~~、==)N/AN/A✓—
Markdown 自动配对(*、~、_、=)N/AN/A✓(延迟触发)N/A
表格导航下一个单元格上一个单元格N/AN/A
列表缩进缩进取消缩进缩进取消缩进
多光标支持✓✓✓—
在代码块内跳过✓✓✓N/A

多光标支持 ​

Tab 跳出支持多光标——每个光标独立处理。

工作原理 ​

当你有多个光标并按 Tab 或 Shift+Tab 时:

  • Tab:格式内的光标跳到末尾;闭合括号前的光标跳过括号
  • Shift+Tab:格式内的光标跳到开头;开括号后的光标跳到括号前
  • 普通文本中的光标保持不动

示例 ​

text
**bold|** and [link|](url) and plain|
     ^1          ^2            ^3

按 Tab:

text
**bold**| and [link](url)| and plain|
        ^1               ^2         ^3

每个光标根据其上下文独立跳出。

TIP

这对于批量编辑特别强大——用 Mod + D 选中多个出现位置,然后用 Tab 同时从所有位置跳出。

优先级与代码块行为 ​

跳出优先级 ​

当多个跳出目标重叠时,Tab 按 由内而外 的顺序处理:

text
**bold text(|)** here
               ↑ Tab jumps ) first (bracket is innermost)

再按 Tab:

text
**bold text()**| here
               ↑ Tab escapes bold mark

这意味着括号跳出始终优先于格式标记跳出——你可以依赖 Tab 先退出括号,再退出格式。

代码块保护 ​

代码块内的括号跳出 禁用——包括 code_block 节点和内联代码 span。这可以防止 Tab 跳过代码中的括号(括号在代码中是字面语法):

text
`array[index|]`
              ↑ Tab does NOT jump ] in inline code — inserts spaces instead

在所见即所得模式和源码模式中,代码块内的自动配对插入也被禁用。

使用技巧 ​

  1. 建立肌肉记忆——一旦习惯了 Tab 跳出,你会发现无需使用方向键就能快速导航。

  2. 与自动配对协作——当你输入 ( 时,VMark 会自动插入 )。在括号内输入后,只需按 Tab 跳出。

  3. 嵌套结构——Tab 每次只跳出一层。对于 ((nested)),需要按两次 Tab 才能完全退出。

  4. Shift + Tab——Tab 的镜像操作。从格式标记、链接和开括号向后跳出。在表格中移动到上一个单元格,在列表中取消缩进。

  5. 多光标——Tab 跳出同时对所有光标生效,让批量编辑更加高效。

在打开的标签页之间切换 ​

标签页位于窗口底部的状态栏中。有三种方式可以在它们之间切换:

操作快捷键说明
最近使用的标签页Ctrl + Tab跳到你在当前标签页之前所在的标签页。再按一次即可直接返回。
下一个 / 上一个标签页Mod + Shift + ] / Mod + Shift + [按顺序沿标签栏移动,与你最近使用过哪些标签页无关。
快速打开Mod + O输入以筛选。已打开的标签页列在最前面,最近使用的排在顶部。

“最近使用的标签页”是来回切换,而不是循环。 它会带你回到最近所在的文档,再按一次就回到起点——这是在两个文件之间来回工作的快捷方式。“下一个”和“上一个标签页”则按位置遍历标签栏,适合你在寻找某个标签页、而不是返回某个标签页的时候使用。

它既是快捷键,也是一个菜单项(视图 → 最近使用的标签页),因此即使内置浏览器拥有键盘焦点,它也能继续工作。

标签页多到放不下时 ​

标签栏可以滚动。当某一侧边缘之外还有标签页时,标签栏在该侧边缘会渐隐,并出现一个小箭头——点击它可滚动一屏。以任何方式切换标签页时,也会把新标签页滚动到可见区域,因此高亮的标签页永远不会隐藏在屏幕之外。

标签栏本身可以通过键盘访问:用 Tab 移动到它上面,然后使用方向键。

并排显示两个文档 ​

视图 → 拆分编辑器——两个文档(Alt + Mod + \)会在当前文档旁边放置第二个文档。要选择显示哪个文档,请右键点击任意标签页并选择 在旁边打开。

操作快捷键
拆分编辑器——两个文档Alt + Mod + \
关闭窗格Alt + Mod + Shift + \
聚焦另一个窗格Alt + Mod + Shift + O
同步窗格滚动(无默认快捷键)

关于它的行为:

  • 显示在另一个窗格中的标签页会在标签栏中以淡淡的下划线标记,因此你始终能分辨屏幕上是哪两个文档,以及你的输入会进入哪一个。
  • 关闭两者之一时会收拢到另一个文档上,而不是把你带到一个不相关的标签页。剩下的文档保持不动。
  • 同步窗格滚动 会按比例把两个窗格的滚动联动起来。它默认关闭,并且按每次拆分单独设置。
  • 两个窗格共用同一种视图模式。 源码模式(F6)会同时切换两个窗格,在窗格之间切换时保持当前模式不变。
  • 拆分需要打开两个文档。浏览器标签页不是文档,因此拆分不适用于它们。

标签页上下文菜单 ​

右键点击标签页即可打开其菜单。方向键、Home 和 End 用于在菜单中移动;Enter 或空格执行某一项;Escape 关闭菜单。

菜单项作用何时可用
移到新窗口把标签页移到一个新窗口中,确认提示中带有 撤销。因此变空的次级窗口会关闭。文档已加载,且它不是主窗口中唯一的标签页
固定 / 取消固定固定或取消固定该标签页——参见固定标签页。始终
在旁边打开在另一个拆分窗格中显示该标签页——参见并排显示两个文档。该标签页和活动标签页都是文档,且该标签页不是活动标签页(浏览器标签页不显示此项)
重命名直接在标签页中重命名文件——参见重命名文件。文档已保存过
复制路径复制文件的绝对路径。文档已保存过
复制相对路径复制相对于工作区文件夹的路径。已打开工作区且文件位于其中
在 Finder 中显示在 Finder 中显示该文件(Windows 上为 在资源管理器中显示,Linux 上为 在文件管理器中显示)。文档已保存过
恢复到磁盘把标签页的内容写回其路径。文件在打开期间已从磁盘上删除
还原为已保存版本经确认后,丢弃你的更改并从磁盘重新加载文件。标签页有未保存的更改,且其文件仍然存在
关闭关闭该标签页(如有未保存的更改,会先询问是否保存)。该标签页未被固定
关闭其他关闭其他所有未固定的标签页。存在另一个未固定的标签页
关闭右侧标签页关闭其右侧未固定的标签页。右侧存在这样的标签页
关闭所有未固定标签页关闭所有未固定的标签页,包括这一个。存在未固定的标签页
全部关闭关闭所有标签页,包括固定的标签页。如果会关闭固定的标签页,它会先询问并说明数量;取消则不关闭任何标签页。始终

批量关闭作用于当前工作区的标签页,并逐个关闭它们。每个有未保存更改的标签页都会先询问,取消其中任何一个提示都会停止关闭其余标签页。

固定标签页 ​

通过标签页的上下文菜单固定它,让它始终触手可及:

  • 它会移到标签栏左侧的固定分组中,显示一个图钉图标,并且不再有关闭按钮。标签页不能被拖过固定与未固定标签页之间的分界(“固定的标签页保留在左侧。无法在此处放下。”),固定的标签页也不能被拖出其所在窗口。
  • 在你取消固定之前,无论用什么方式都无法关闭它——Mod + W、鼠标中键点击、关闭 或批量关闭都不行;尝试关闭时会显示 “关闭前请先取消固定”。只有两种有意的关闭例外:全部关闭 在你确认后也会关闭固定的标签页;从工作区栏关闭一个工作区时,它的固定标签页会随其他标签页一起关闭。
  • 关闭含有固定标签页的窗口时会请求确认——“此窗口有 N 个固定标签页。仍要关闭吗?”——除非之前已经显示过保存对话框。
  • 把标签页移到另一个窗口或工作区,以及更新重启后,固定状态都会保留;但退出 VMark 后不会保留:下次启动时重新打开的标签页都是未固定的。

固定没有键盘快捷键。

重命名文件 ​

在标签页的上下文菜单中选择 重命名。名称会在标签页中变为可编辑状态,扩展名之前的部分会被选中。按 Enter 或点击别处即提交;按 Escape 取消。文件会在磁盘上被重命名,所有指向它的已打开标签页都会随之更新。VMark 从不覆盖文件:如果该名称已被占用,会弹出对话框提示 已存在名为“X”的文件。 为空、未更改、为 . 或 ..、或包含 / 或 \ 的名称会被拒绝或忽略。你输入的就是完整的名称——删掉扩展名,文件就会失去扩展名。

在 macOS 上,如果开启了 设置 → 外观 → 在标题栏显示文件名,你也可以双击标题栏中的文件名来重命名。规则和提示消息相同;名称冲突或出错后,名称仍保持可编辑状态,方便你换一个名称。如果 显示文件扩展名 处于关闭状态,当你输入不带扩展名的名称时,会保留原来的扩展名。双击未保存文档的标题则会打开 保存。

关闭标签页和窗口 ​

任何有未保存更改的内容都不会在未询问的情况下被关闭。

  • 关闭单个有未保存更改的标签页(Mod + W、标签页上的 ×,或 关闭)时,会询问 “要保存对“…”的更改吗?”,并提供 保存、不保存 和 取消。对从未保存过的文档选择 保存,会在你的默认保存文件夹中打开保存对话框,并以标签页标题作为建议名称。取消该对话框或保存失败,标签页都会保持打开。
  • 关闭窗口时,如果只有一个未保存的文档,会询问同样的问题。如果有两个或更多,会用一个对话框列出全部——从未保存过的文档标有 (新)——并提供 全部保存、不保存 和 取消。
  • 全部保存 会保存每个有对应文件的文档。对于从未保存过的文档,它会询问保存位置:只有一个时显示一个保存对话框,有多个时显示一个文件夹选择器(“为 N 个新文档选择文件夹”)。随后每个文档都会以其标题保存到该文件夹中,已被占用的名称会加上编号(Untitled 2.md),因此不会覆盖任何文件。
  • 退出(Mod + Q)会在每个窗口中逐一执行同样的检查;在任一窗口中取消都会取消退出。开启 设置 → 文件与图片 → 确认退出(默认开启)时,第一次按下只会显示 “再次按 ⌘Q 退出”——请在两秒内再按一次。来自操作系统的退出(例如关机)会跳过两次按键。
  • 全部保存并退出 会在不弹出对话框的情况下保存每个窗口中未保存的文档(对从未保存过的文档,仍会在其所在窗口询问保存位置:一个文档弹出保存对话框,多个文档弹出一次文件夹选择),然后退出。如果某个文档无法保存,或你取消了该对话框,退出就会中止:该窗口保持打开,保存失败时会说明原因。

在 macOS 上,VMark 在最后一个窗口关闭后仍会继续运行;在 Windows 和 Linux 上,关闭最后一个窗口即退出——除非在 Windows 上开启了 设置 → 文件与图片 → 关闭时最小化到托盘:此时最后一个窗口会被隐藏到系统托盘中,不关闭任何内容,也不会提示保存(参见设置)。