工作区管理
VMark 中的工作区是将某个文件夹作为项目根目录打开。打开工作区后,侧边栏会显示文件树,快速打开功能可以找到文件树中显示的每个文件,终端从项目根目录启动,并且你打开的标签页会被记住以供下次使用。
没有工作区时仍然可以打开单个文件,但会失去文件浏览器、项目内搜索和会话恢复功能。
一个窗口中的多个工作区
实验性的工作区导轨让单个窗口可以容纳多个工作区并在它们之间切换——每个工作区都有自己的标签页、文件树和布局。
打开工作区
| 方式 | 操作 |
|---|---|
| 菜单 | 文件 > 打开工作区 |
| 快速打开 | Mod + O,然后在底部选择 **浏览... ** |
| 拖放 | 从 Finder 将 Markdown 文件拖入窗口——VMark 会自动检测其项目根目录并打开工作区 |
| 最近的工作区 | 文件 > 最近的工作区,选择之前的项目 |
打开工作区后,VMark 会在侧边栏显示文件浏览器。如果该工作区之前已打开过,之前打开的标签页会被恢复。
在 Windows 和 Linux 上,通过命令行传入的文件夹(vmark C:\notes 或 vmark ~/notes)会在单独的窗口中作为工作区打开,就像在 macOS 上把文件夹拖到程序坞图标上一样。VMark 已在运行时同样有效。
TIP
如果当前窗口有未保存的更改,VMark 会提示是否在新窗口中打开工作区,而不是替换当前内容。
文件浏览器
只要工作区已打开,文件浏览器就会显示在侧边栏中。它显示以工作区文件夹为根的 Markdown 文件树。
导航
- 单击 文件夹可展开或折叠
- 单击 文件可在标签页中打开
- 在选中的项目上按 Enter(或
F2)可开始内联重命名 - VMark 自身不编辑的文件(开启 显示所有文件 后可见)使用系统默认应用打开
- 首次打开工作区时,所有文件夹均为折叠状态;在“文件”“大纲”“历史记录”视图之间切换时,文件夹的展开状态会被保留
快速查看
在文件树中选中一个文件并按 Space,即可在全窗口浮层中预览它而无需打开标签页——图片、视频和音频会以其原生控件呈现;其他文件则显示一个“无法预览”面板,并提供一个在外部打开它的按钮。←/↑ 和 →/↓ 按顺序在文件树的可见文件之间逐个切换(不循环),按 Space、Escape 或点击背景即可关闭预览。在内联重命名输入框中键入空格永远不会触发它。
标题栏按钮
“文件”视图的标题栏提供作用于整个文件树的控件:
- 展开所有文件夹——展开文件树中的每个文件夹
- 折叠所有文件夹——将每个文件夹折叠回根目录
- 显示所有文件——一个开关;开启时(高亮显示),文件树会列出所有文件,而不仅是 VMark 能打开的文件
- 新建文件 / 新建文件夹——在所选文件夹中创建;未选中任何项目时则在工作区根目录中创建
文件操作
右键单击文件、文件夹或文件树下方的空白区域可访问上下文菜单:
| 操作 | 适用于 | 描述 |
|---|---|---|
| 打开 | 文件 | 在新标签页中打开文件 |
| 重命名 | 文件、文件夹 | 内联编辑文件或文件夹名称(也可按 F2) |
| 复制 | 文件 | 创建文件的副本 |
| 移至... | 文件 | 通过对话框将文件移动到其他文件夹 |
| 删除 | 文件、文件夹 | 将文件或文件夹移至系统回收站 |
| 复制路径 | 文件、文件夹 | 将绝对路径复制到剪贴板 |
| 在 Finder 中显示 | 文件、文件夹 | 在文件管理器中显示该项目——在 Windows 上标签为 在资源管理器中显示,在 Linux 上标签为 在文件管理器中显示 |
| 新建文件 | 文件夹、空白区域 | 在此位置创建新的 Markdown 文件 |
| 新建文件夹 | 文件夹、空白区域 | 在此位置创建新文件夹 |
| 在此处打开终端 | 文件夹 | 在此文件夹中启动一个新的终端会话(已打开 5 个会话时不可用)——参见终端 |
你也可以直接在文件树中 拖放 文件到不同文件夹。
可见性切换
默认情况下,浏览器只显示 VMark 能打开的文件类型,并隐藏以点开头的文件。无论文件夹中是否有可见内容,文件夹都会被列出,因此一个全是不受支持文件类型的项目看起来就像一棵由空文件夹组成的树——这是过滤器在起作用,而不是读取目录失败。两个切换开关可以改变此行为:
| 切换 | 快捷键 | 效果 |
|---|---|---|
| 显示隐藏文件 | Mod + Shift + .(macOS)/ Ctrl + H(Win/Linux) | 显示隐藏文件和隐藏文件夹 |
| 显示所有文件 | Mod + Shift + A | 在文档旁显示非 Markdown 文件 |
两个设置均按工作区保存,并在会话间持久保留。
排除的文件夹
无论工作区设置如何,有些目录永远不会被列出其内容——与工作区搜索采用的是同一条底线:.git、node_modules、.obsidian、.svn、__pycache__、.DS_Store、.vscode、.idea、target、.next、dist、.superpowers。它们仍然以文件夹的形式出现,让你知道它们存在;但其内容不会被读取。你可以在工作区设置的 排除的文件夹 中添加自己的名称(新工作区在其中预置了 .git 和 node_modules)。
文件树一次性列出,并在文件变化时刷新。一连串的变化只会在这串变化结束后不久刷新一次;对于一个从不停止变化的文件夹(正在进行的下载、构建、同步),刷新间隔会逐渐拉长,而不是持续刷新,因此文件浏览器永远不会因为反复读取繁忙的工作区而占满一个 CPU 核心。
快速打开
按 Mod + O 打开快速打开覆盖层。它提供三个来源的模糊搜索,按以下顺序列出:
- 当前窗口中 已打开的标签页(以圆点标记),最近使用的排在最前
- 你之前打开过的 最近文件
- 工作区中 文件浏览器当前显示的所有文件
在你输入之前,列表只显示已打开的标签页和最近文件。开始输入后,三个来源的结果都会出现,按上述顺序分组,并在每组内按匹配质量排序。
输入几个字符即可筛选——匹配是模糊的,所以 rme 可以找到 README.md。使用方向键导航,按 Enter 打开。底部有一行固定的 **浏览... ** 选项可打开文件对话框。
第三个来源与文件浏览器完全一致,因此两者对于“存在哪些文件”永远不会有分歧。开启 显示隐藏文件 后,快速打开可以找到 .claude/、.github/workflows/ 以及其他任何以点开头的目录下的文档;开启 显示所有文件 后,它也能找到非 Markdown 文件,并以与在侧边栏中点击相同的方式打开每个文件——VMark 自身支持的格式在标签页中打开,其他文件则用系统默认应用打开。始终跳过列表中的文件夹(.git、node_modules、.vscode 等)在两者中都不会出现。
| 操作 | 快捷键 |
|---|---|
| 打开快速打开 | Mod + O |
| 导航结果 | ↑ / ↓ |
| 打开选中文件 | Enter |
| 关闭 | Escape |
TIP
没有工作区时,快速打开仍然有效——它会显示最近文件和已打开的标签页,但无法搜索文件树。
工作区内容搜索
工作区打开后,VMark 可以跨 文件内容(不仅仅是文件名)进行搜索。默认搜索 VMark 能打开的文件类型(Markdown、纯文本、YAML,以及在相应格式支持开启时的 JSON/TOML/Mermaid/SVG/HTML)。关闭 .md 开关(仅限支持的文件类型)即可搜索所有文本文件(二进制文件始终会被跳过)。
| 操作 | 快捷键 |
|---|---|
| 打开内容搜索面板 | Mod + Shift + H(也可通过 编辑 → 查找 → 在文件中查找...) |
| 跳到下一个结果 | Enter(或用方向键导航) |
| 在新标签页中打开结果 | 点击匹配预览 |
每条结果显示文件路径、行号以及高亮匹配文本的代码片段。结果不做排序:文件按搜索遍历工作区文件夹时到达的顺序列出。搜索在找到 50 个匹配文件、1,000 个匹配或满 5 秒后停止,并显示到那时为止找到的结果。
默认排除:VMark 从不进入的文件夹 —— .git、node_modules、.obsidian、.svn、__pycache__、.DS_Store、.vscode、.idea、target、.next、dist、.superpowers —— 以及工作区设置中 排除的文件夹 里列出的任何名称(新工作区在其中预置了 .git 和 node_modules)。
隐藏文件:无论文件浏览器的 显示隐藏文件 开关如何设置,内容搜索始终跳过以点开头的文件。
它与快速打开有所不同 —— 快速打开仅搜索 文件名;内容搜索会打开匹配文件,并将光标置于匹配行。
最近的工作区
VMark 最多记住 10 个最近打开的工作区。从菜单栏的 文件 > 最近的工作区 访问它们。
- 工作区按最后打开时间排序(最新的在最前面)
- 列表在每次更改时同步到原生菜单
- 选择 清除最近的工作区 可重置列表
工作区设置
每个工作区都有自己的配置,在会话间持久保留。设置存储在 VMark 应用数据目录中——而不是项目文件夹内——以保持项目文件夹的整洁。
以下设置按工作区保存:
| 设置 | 描述 |
|---|---|
| 排除的文件夹 | 从文件浏览器中隐藏的文件夹 |
| 显示隐藏文件 | 隐藏文件是否可见 |
| 显示所有文件 | 非 Markdown 文件是否可见 |
| 上次打开的标签页 | 用于下次打开时恢复会话的文件路径 |
TIP
工作区配置与文件夹路径绑定。在同一台机器上打开相同文件夹时,总是会恢复你的设置,即使从不同窗口打开也是如此。
空工作区窗口
关闭最后一个打开的文档不再会关闭窗口。窗口会保持打开并显示 欢迎屏幕;如果你打开了工作区,其侧边栏和文件树也仍然可见。这在 macOS、Windows 和 Linux 上的行为完全相同。
欢迎屏幕提供了一些快捷操作,帮你迅速回到工作状态:
- 新建文件、打开文件 和 打开工作区… 按钮
- 最近文件 列表和 最近工作区 列表——点击任意条目即可重新打开。每个列表只在有条目时才会显示。
打开文件 和最近列表会复用你当前所在的窗口。欢迎屏幕窗口没有可被替换的标签页,因此不会在第二个窗口中打开任何内容——除非该窗口仍打开着工作区,此时来自该工作区之外的文件会在自己的窗口中打开,而不是替换你仍能在侧边栏中看到的文件树。
欢迎屏幕窗口的标题栏显示 VMark:没有打开的文档,因此没有可显示的文件名。
要关闭窗口本身,请使用红色的交通灯按钮、Cmd/Ctrl + Q(退出),或在显示欢迎屏幕时再次按 Cmd/Ctrl + W。
并排文档
同时打开两个不同的文档——将编辑器拆分为两个窗格,每个窗格显示各自的文档。适用于双语阅读/翻译(一侧原文,一侧译文),或在写作时保持一份参考资料处于打开状态。这与 Markdown 分屏视图(Shift + F6)不同,后者是同一个文件的源码 + 预览。
- 使用
Alt + Mod + \或命令面板(拆分编辑器:并排显示两个文档)切换拆分。当前文档保留在一个窗格中,而在它之前你最近使用过的文档(如果没有,则是另一个已打开的文档)会在另一个窗格中打开——同一文档绝不会显示两次,因此拆分需要打开两个文档。在某个窗格获得焦点时点击标签页,可更改该窗格中的文档;也可以右键单击标签页并选择 在旁边打开。 - 拖动分隔条(或使其获得焦点后使用方向键)可调整窗格大小。
- 你正在编辑的窗格是焦点窗格——工具栏、查找栏和菜单命令都作用于它。
- 开启 同步分栏滚动(命令面板)可让两侧按比例一起滚动——便于对齐译文。
会话恢复
当你关闭一个已打开工作区的窗口时,VMark 会将已打开标签页的列表保存到工作区配置中。下次打开同一工作区时,这些标签页会自动恢复。
- 只有带有已保存文件路径的标签页才会恢复(未命名标签页不会持久保存)
- 如果某个文件自上次会话以来已被移动或删除,则会静默跳过
- 会话数据在窗口关闭和工作区关闭(文件 > 关闭工作区)时保存
多窗口
每个 VMark 窗口可以有独立的工作区,让你可以同时处理多个项目。
- 文件 > 新建窗口 打开一个新窗口
- 在新窗口中打开工作区不会影响其他窗口
- 窗口大小和位置按窗口记住
当你从 Finder 拖入 Markdown 文件而当前窗口已有未保存的工作时,VMark 会自动在新窗口中打开该文件的项目。
从当前工作区之外打开文件
已打开工作区的窗口会保持该工作区不变。打开一个位于其他位置的文件——无论是从 Finder 或资源管理器、从 文件 > 打开,还是从最近文件——都会在一个以该文件所在文件夹为根的新窗口中打开,因此你正在使用的文件树会保持原样。只有本身没有工作区的窗口才会就地接收该文件。
在 Windows 和 Linux 上,双击一个已关联到 VMark 的文件类型,现在会把它交给你已经在运行的 VMark,而不是启动第二个副本。macOS 一直都是这样工作的。
将标签页分离到新窗口
你可以将标签页拖出其窗口以创建新窗口:
- 将标签页拖出标签栏——在其上方或下方超过约 40 px——即可将其分离。在另一个 VMark 窗口上松开,可将标签页移入该窗口;在其他任何位置松开,则会在指针位置的新窗口中打开它
- 水平拖动标签页 在标签栏内重新排列其在其他标签页之间的顺序
- 固定的标签页无法拖动
一条提示通知会确认此次移动,并提供 撤销,可将标签页移回原处。浏览器标签页和主窗口的最后一个标签页无法拖出,它们会弹回原位。
手势按方向锁定:水平移动开始重排,垂直移动触发分离。你可以在拖动过程中将指针移出标签栏来从重排切换到分离。
窗口状态面板
当你在多个窗口中运行 Claude Code 时,视图 > 切换窗口状态(也可通过命令面板,或按 Ctrl + Shift + 5)会打开一个面板,列出其他每个已打开窗口及其实时状态,并让你直接跳转过去。
每一行显示窗口的文档名称及其当前状态:
| 状态 | 含义 |
|---|---|
| 需要关注 | 该(未获得焦点的)窗口中的某个终端发出了响铃——Claude Code 会在一轮对话结束或等待你操作时响铃 |
| 运行中 | 该窗口中正在运行一个 VMark AI 精灵 |
| 错误 | 上一次 AI 精灵运行失败 |
| 空闲 | 没有正在运行的任务 |
各行按“需要关注”优先排序,因此需要你处理的窗口总是排在最前。点击任意一行即可聚焦并前置该窗口;聚焦窗口会清除其“需要关注”标记。状态来自两个可靠的信号——VMark 自身的 AI 精灵调用状态和终端响铃——而不是通过解析终端输出得到。
固定面板,即可将其用作常驻的“任务控制中心”:固定后,点击某一行会聚焦目标窗口,但面板保持打开,因此你可以在多个窗口之间来回切换而无需重新打开它。标题栏中的固定按钮会打开一个小菜单,提供两种范围:
- 固定此窗口——只在当前窗口中固定面板。其打开和固定状态会按窗口记住,重启后依然保留,因此你设置为仪表板的窗口会一直保持那样。
- 固定所有窗口——全局固定:每个窗口都会自动打开面板并表现为已固定状态,包括你之后打开的窗口,因此你只需选择一次任务控制中心布局,而不必逐个手动设置窗口。关闭它后,每个窗口都会恢复为各自的按窗口固定状态。
外部更改
VMark 监控你的工作区,以检测其他程序(Git、外部编辑器、构建工具等)所做的更改,并保持已打开文档同步。
- 未修改的文件 在磁盘内容更改时自动重新加载。一条简短的提示通知确认重新加载。
- 有未保存更改的文件 会触发一个包含三个选项的对话框:另存为(将你的版本保存到新位置)、重新加载(放弃你的更改并从磁盘加载)或 保留(保留你的编辑并将文件标记为分歧状态)。
- 已删除的文件 在其标签页中标记为缺失,但不会关闭——你仍然可以将内容保存到新位置。
- 当多个已修改文件同时更改时(例如
git checkout后),VMark 会将它们批量合并到一个对话框中,以便你可以全部重新加载、全部保留或逐个查看。 - 如果分歧文件的磁盘内容后来与编辑器中的内容匹配(例如
git checkout恢复了相同的文本),VMark 会自动清除分歧状态,正常的自动保存将恢复。
VMark 会过滤自身的保存操作,因此你永远不会因应用内所做的更改而收到提示。
macOS Dock 最近文稿
你在 VMark 中打开的文档会在 macOS 中注册,因此当你右键单击 Dock 中的 VMark 图标时,它们会出现在 最近使用的项目 子菜单中。
终端集成
集成终端自动以工作区根目录作为其工作目录。当你打开或切换工作区时,空闲的终端会话会 cd 到新的根目录。正在运行命令的会话不会被打扰,它会在命令结束后再切换目录(这需要 Shell 集成来判断会话是否繁忙)。开启工作区导轨后,属于某个工作区的会话会保留各自的目录。
在每个终端会话中,VMARK_WORKSPACE 环境变量会被设置为工作区路径,以便你的脚本可以引用项目根目录。
Shell CLI 命令
VMark 可以安装 vmark Shell 命令,让你从终端打开文件和文件夹。
安装与移除
帮助 > Shell 命令:在 PATH 中安装 'vmark'... 是一个可切换的单一菜单项。当尚未安装 vmark 命令时,它会向 /usr/local/bin/vmark 写入一个小型启动脚本,并请求你的管理员密码(与 VS Code 安装 code 命令的方式相同)。当 VMark 自己的脚本已经存在时,同一菜单项会将其移除。无论哪种情况,都会有对话框报告结果。仅限 macOS。
用法
# 打开文件
vmark README.md
# 以工作区方式打开文件夹
vmark ~/projects/my-blog
# 打开多个文件
vmark chapter1.md chapter2.md该命令委托给 open -b app.vmark,因此 macOS 处理单实例行为——文件在你现有的 VMark 窗口中打开,而不是启动新进程。
如果 /usr/local/bin/vmark 处的文件不是由 VMark 写入的,该菜单项不会做任何改动,并会提示你手动删除它。