智慧 Tab 導覽
VMark 的 Tab 和 Shift+Tab 鍵具有情境感知功能——可幫助你在格式化文字、括號和連結之間高效導覽,無需切換到方向鍵。
啟用實驗性的工作區導軌時,分頁循環切換與分頁列只涵蓋目前工作區的分頁。
快速概覽
| 情境 | Tab 操作 | Shift+Tab 操作 |
|---|---|---|
位於括號 () [] {} 內 | 跳過右括號 | 跳至左括號之前 |
位於引號 "" '' 內 | 跳過右引號 | 跳至左引號之前 |
位於中日韓文括號 「」 『』 內 | 跳過右括號 | 跳至左括號之前 |
位於 粗體、斜體、程式碼、 | 跳至格式之後 | 跳至格式之前 |
| 位於連結內 | 跳至連結之後 | 跳至連結之前 |
| 位於表格儲存格內 | 移至下一個儲存格 | 移至上一個儲存格 |
| 位於清單項目內 | 增加縮排 | 減少縮排(到最外層為止) |
括號與引號跳脫
當游標恰好位於右括號或引號之前時,按下 Tab 即可跳過。當游標恰好位於左括號或引號之後時,按下 Shift+Tab 即可跳回其前方。
支援的字元
標準括號與引號:
- 小括號:
( ) - 方括號:
[ ] - 大括號:
{ } - 雙引號:
" " - 單引號:
' ' - 反引號:
`
中日韓文括號:
- 全形括號:
( ) - 方頭括號:
【 】 - 角括號:
「 」 - 白角括號:
『 』 - 雙書名號:
《 》 - 單書名號:
〈 〉
彎引號:
- 雙彎引號:
" " - 單彎引號:
' '
運作原理
function hello(world|)
↑ cursor before )按下 Tab:
function hello(world)|
↑ cursor after )巢狀括號同樣適用——Tab 只跳過緊鄰的右括號字元。
按下 Shift+Tab 執行反向操作——若游標緊跟在左括號之後:
function hello(|world)
↑ cursor after (按下 Shift+Tab:
function hello|(world)
↑ cursor before (中日韓文範例
这是「测试|」文字
↑ cursor before 」按下 Tab:
这是「测试」|文字
↑ cursor after 」格式跳脫(所見即所得模式)
在所見即所得模式中,Tab 和 Shift+Tab 可以跳出行內格式標記。
支援的格式
- 粗體 文字
- 斜體文字
行內程式碼刪除線- 連結
運作原理
當游標位於格式化文字內任意位置時:
This is **bold te|xt** here
↑ cursor inside bold按下 Tab:
This is **bold text**| here
↑ cursor after boldShift+Tab 執行反向操作——跳至格式的起始位置:
This is **bold te|xt** here
↑ cursor inside bold按下 Shift+Tab:
This is |**bold text** here
↑ cursor before bold連結跳脫
Tab 和 Shift+Tab 同樣可以跳出連結:
Check out [VMark|](https://vmark.app)
↑ cursor inside link text按下 Tab:
Check out [VMark](https://vmark.app)| and...
↑ cursor after link在連結內按下 Shift+Tab 可移至起始位置:
Check out |[VMark](https://vmark.app) and...
↑ cursor before link連結導覽(原始碼模式)
在原始碼模式中,Tab 可在 Markdown 連結語法的各欄位之間進行智慧導覽。
巢狀與跳脫括號
VMark 可正確處理複雜的連結語法:
[text [with nested] brackets](url) ✓ 支援
[text \[escaped\] brackets](url) ✓ 支援
[link](https://example.com/page(1)) ✓ 支援即使含有巢狀或跳脫括號,Tab 導覽也能正確識別連結邊界。
標準連結
[link text|](url)
↑ cursor in text按下 Tab → 游標移至 URL:
[link text](|url)
↑ cursor in URL再次按下 Tab → 游標離開連結:
[link text](url)|
↑ cursor after linkWiki 連結
[[page name|]]
↑ cursor in link按下 Tab:
[[page name]]|
↑ cursor after link原始碼模式:Markdown 字元跳脫
在原始碼模式中,Tab 也可跳過 Markdown 格式字元:
| 字元 | 用途 |
|---|---|
* | 粗體/斜體 |
_ | 粗體/斜體 |
^ | 上標 |
~~ | 刪除線(整體跳過) |
== | 高亮(整體跳過) |
範例
This is **bold|** text
↑ cursor before **按下 Tab:
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 之後將正常插入空格(或在清單/表格中執行縮排)。
比較:所見即所得 vs 原始碼模式
| 功能 | Tab(所見即所得) | Shift+Tab(所見即所得) | Tab(原始碼) | Shift+Tab(原始碼) |
|---|---|---|---|---|
| 括號跳脫 | ✓ | ✓ | ✓ | — |
| 中日韓文括號跳脫 | ✓ | ✓ | ✓ | — |
| 彎引號跳脫 | ✓ | ✓ | ✓ | — |
| 格式標記跳脫(粗體等) | ✓ | ✓ | N/A | N/A |
| 連結跳脫 | ✓ | ✓ | ✓(欄位導覽) | — |
Markdown 字元跳脫(*、_、~~、==) | N/A | N/A | ✓ | — |
Markdown 自動配對(*、~、_、=) | N/A | N/A | ✓(延遲偵測) | N/A |
| 表格導覽 | 下一個儲存格 | 上一個儲存格 | N/A | N/A |
| 清單縮排 | 縮排 | 取消縮排 | 縮排 | 取消縮排 |
| 多重游標支援 | ✓ | ✓ | ✓ | — |
| 程式碼區塊內停用 | ✓ | ✓ | ✓ | N/A |
多重游標支援
Tab 跳脫支援多重游標——每個游標獨立處理。
運作原理
當你有多個游標並按下 Tab 或 Shift+Tab 時:
- Tab:位於格式內的游標跳至結尾;位於右括號前的游標跳過該字元
- Shift+Tab:位於格式內的游標跳至起始;位於左括號後的游標跳至其前方
- 位於一般文字中的游標保持不動
範例
**bold|** and [link|](url) and plain|
^1 ^2 ^3按下 Tab:
**bold**| and [link](url)| and plain|
^1 ^2 ^3每個游標根據所在情境獨立跳脫。
TIP
此功能在批次編輯時特別強大——使用 Mod + D 選取多個符合項目,再用 Tab 一次從所有位置跳脫。
優先順序與程式碼區塊行為
跳脫優先順序
當多個跳脫目標重疊時,Tab 以 由內而外 的順序處理:
**bold text(|)** here
↑ Tab 先跳 )(括號是最內層)再次按下 Tab:
**bold text()**| here
↑ Tab 跳脫粗體標記這意味著括號跳脫始終優先於格式標記跳脫——你可以依賴 Tab 先跳出括號,再跳出格式。
程式碼區塊防護
Tab 和 Shift+Tab 括號跳脫在 程式碼區塊內停用——包括 code_block 節點和行內程式碼 span。這可防止 Tab 跳過程式碼中的括號(程式碼中的括號是字面語法):
`array[index|]`
↑ Tab 不會在行內程式碼中跳 ] — 而是插入空格在所見即所得和原始碼模式中,程式碼區塊內的自動配對插入同樣停用。
技巧
肌肉記憶——一旦習慣 Tab 跳脫,你會發現無需方向鍵就能導覽得更快。
搭配自動配對——輸入
(時,VMark 會自動插入)。輸入完內容後,直接按 Tab 跳出。巢狀結構——Tab 每次只跳脫一層。對於
((nested)),需要按兩次 Tab 才能完全跳出。Shift + Tab——Tab 的鏡像操作。從格式標記、連結和左括號向前跳脫。在表格中移至上一個儲存格,在清單中取消縮排。
多重游標——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 或 Space 執行項目;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 上開啟了設定 → 檔案與圖片 → 關閉時最小化至系統匣:這時最後一個視窗會改為隱藏到系統匣中,不關閉任何內容,也不會出現儲存提示(請參閱設定)。