Vim mode — 命令参考
本页说明启用本插件后,各个按键的行为会发生怎样的变化。
与 For everyone、macOS (Emacs) style 不同,这里与 Vim mode 相关的行为升级并不是将命令分配给快捷键。
当开关设为 ON 时,会直接替换 Obsidian 内置 Vim mode 内部的行为定义;设为 OFF 时则不进行替换,保持标准 Vim mode 原本的行为。(即下文"此前"所描述的行为)
Motion upgrades(行为升级)
修复 Vim 基础光标移动相关的行为。
将表格的单元格视为"行",h/l 会在单元格开头/末尾处停止,w/b/e 则会越过开头/末尾继续移动。
| 键 | 功能概述 |
|---|---|
h l x | 支持表情符号与扩展汉字 将表情符号等内部占用多个字符长度的字符,按 1 个字符计数。(如 "🟩"、"𠮷" 等代理对字符,以及像 "☺️" 这种带有异体字选择符的表情符号) 此前,像 4l 这样带数量前缀移动时,每经过一个表情符号就会偏移 1 个字符;像 3x 这样带数量前缀删除时,表情符号有时会被破坏导致乱码。另外,像 "☺️" 这样的字符有时还会导致光标变得不可见。支持表格 单元格内的文本也会在行首/行末正确停止( h/l),在行末删除字符同样能正确执行(x)。此前会越过行首/行末移动到相邻单元格,或者在行末无法删除字符而是移动到了相邻单元格。 |
j k | 支持表格 移动到表格的下一行/上一行时,会保持光标的列位置(即 Vim 自身的目标列位置)不变地移动。在单元格内换行的文本中也能正确停止。 此前,跨行时列位置不会保持,而是移动到单元格开头;在单元格内换行文本中移动时,离开单元格前的最后一行( j 为最后一行,k 为第一行)会被跳过。 |
w b e(以及 W B E ge gE) | 支持中文 按中文/英文单词为单位移动。(中文基于词典进行分词; W/B/E/gE 仍按空格分隔)此前,连续的汉字等会被视为一个不可分割的单词整体。 支持表格 就像 Vim 自身的 w/b/e 会越过行首、行末前进到下一行一样,这里会越过单元格、行的边界移动。移动到表格边缘时,会脱出到表格之外(前后的文本)。此前会在单元格开头/末尾处停止,无法继续前进。 |
gg G | 支持表格 即使当前位于表格内,也会移动到笔记的第一行/最后一行。 落点的光标位置依照 Smart home 的设置。 如果用 G 移动到笔记末尾时末尾恰好是表格,则会在表格外追加一个空行并落在那里(不会落在表格内部)。另一方面, gg 不会执行这种追加空行的操作:如果笔记开头是表格,则会落在表头行(最左侧单元格开头)。此前,在表格内时只会移动到当前单元格的第一行/最后一行。 |
gj gk | 支持表格 是上面 j/k 的显示行版本。即使在换行显示的单元格内,也会按显示行逐行移动,跨行时也会保持屏幕上的横向位置(视觉上的光标位置)不变。在单元格内换行的行中也能正确停止。 此前,跨行时列位置不会保持,而是移动到单元格开头;在单元格内换行的行中,离开单元格前的最后一行( gj 为最后一行,gk 为第一行)会被跳过。另外,在换行显示的单元格中不会按显示行逐行停止,而是一次性移动到相邻的表格行(如果是最后一行的单元格,则移动到表格外)。 |
$ | 支持表格 用 $ 移动到行末后,再用 j/k、gj/gk 上下移动时,会持续吸附在各行的行末(吸附 / sticky)。跨越表格行时同样如此——从纯文本进入表格时会落在最右侧的单元格。混用 j/k 与 gj/gk 时,吸附状态同样会保持。此前,跨越表格行时不会吸附到行末,而是移动到单元格开头。进入表格时也总是落在最左侧的单元格。另外,混用 j/k 与 gj/gk 时吸附状态可能会丢失——这一点也与真正的 Vim/Neovim 自身的行为不同。 |
^ I | Smart home 将 ^ 的移动目标和 I 的插入位置,设为跳过空白以及行首 Markdown 语法(列表、引用等)之后的正文文本开头。无论是否在表格内都会应用。Smart home (standard) 为 OFF 时保持 Vim mode 原本的行为;为 ON 时会跳过列表、复选框、缩进、引用标记。 Smart home (advanced) 为 ON 时,还会进一步跳过标题、脚注、标注的种类标记。 关于 Smart home 的实际效果,请参阅 macOS (Emacs) style 页面 中的视频。 此前是 Vim 原本的行为,即"仅跳过空白字符"。 |
J | Smart join 先删除第 2 行开头的 Markdown 语法(依据 Smart home 的规则),再用 1 个空格连接两行。 Smart join 为 OFF 时(默认)保持 Vim mode 原本的行为;为 ON 时会删除列表、复选框、缩进、引用标记。 Smart home (advanced) 为 ON 时,还会进一步删除标题、脚注、标注的种类标记。 关于 Smart join 的实际效果,请参阅 macOS (Emacs) style 页面 中的视频。 此前,只会去除第 2 行开头的空白,再用 1 个空格连接两行。(引用和列表的标记会保留) |
Table structure(表格结构操作)
将现有的 Obsidian 标准表格操作命令,改为可以从 Vim mode 内以 <leader> t 开头的按键序列执行。Leader 键 <leader> 默认为 Space,但也可以选择 \。
除 tm 以外,在表格外不会执行任何操作。
仿照 Vim 的插入行命令 o/O,将插入表格行下方的命令设为 to、插入上方的命令设为 tO;同样的命令也可以用 tiJ/tiK 执行(这是别名)。这与左右插入列形成对应关系,构成了 tiH/tiJ/tiK/tiL 这一组命令。
| 行 | 列 | |
|---|---|---|
| 插入 | <leader>to/<leader>tO<leader>tiJ/<leader>tiK(下/上) | <leader>tiH/<leader>tiL(左/右) |
| 移动 | <leader>tK/<leader>tJ(上/下) | <leader>tH/<leader>tL(左/右) |
| 删除 | <leader>tdd | <leader>tdc |
| 复制 | <leader>tyyp | <leader>tyc |
| 对齐 | — | <leader>tal(左)<leader>tac(居中)<leader>tar(右) |
<leader>tm:在光标位置插入表格。是这里列出的命令中唯一一个可以在已有表格之外执行的命令。
Table navigation(单元格间的光标移动)
这是仅在单元格之间移动光标的命令。在表格单元格之外不会执行任何操作。
| 键 | 功能 |
|---|---|
<leader>tj/<leader>tk | 跳转到同一列的下方/上方单元格,并落在其正文开头。 这与 j/k 保持光标列位置的做法不同。另外,在表格的上下端不会执行任何操作。 |
<leader>th/<leader>tl | 跳转到同一行的左/右单元格,并落在其正文开头。 Obsidian 内置的 Tab/Shift + Tab 单元格移动会选中目标单元格内的全部文本,并在行的左右端绕到下一行的另一侧;在表格末尾时还会插入新的一行。但 th/tl 不会产生选区,始终停留在当前行内,在行的左右端不会执行任何操作。 |
<leader>tx/<leader>tX | 从当前表格向下/向上脱出。Smart home 会跳过落点行开头的 Markdown 语法。 在笔记末尾的表格中执行 tx 时,会追加一个空行并落在那里。另一方面,在笔记开头的表格中执行 tX 时,不会在笔记开头追加空行,而是落在表头行的最左侧。在实时预览和源代码模式下均可使用。 |