ad编辑器入门:如何像老手一样玩转文本选择与dot选区机制
2026/8/21 13:42:36 网站建设 项目流程

ad编辑器入门:如何像老手一样玩转文本选择与dot选区机制

【免费下载链接】adan adaptable text editor项目地址: https://gitcode.com/gh_mirrors/ad5/ad

ad 编辑器(an adaptable text editor)是一款用 Rust 编写的模态文本编辑器,融合了 vim 的模式编辑、kakoune 的选区操作与 Plan9 系 sam/acme 的dot 选区机制。本文将从零开始,带你理解 ad 编辑器中"一切编辑操作都以 dot 为核心"的设计哲学,并快速掌握文本选择与选区操纵的核心技巧,让你像老手一样高效编辑。无论你是 vim 用户还是初次接触模态编辑器的新手,这篇文章都能帮你快速上手 ad 编辑器的文本选择机制。

什么是 dot 选区机制:ad 编辑器的核心概念

在 ad 编辑器中,每个缓冲区(Buffer)都维护着一个dot,它表示"当前选中的文本"。dot 的概念来自 Rob Pike 的 sam 编辑器:在编辑语言中,dot 用.表示,绝大多数编辑命令都是通过"设置 dot、扩展 dot、操纵 dot"来完成的。

从源码上看,dot 只分为两种形态(见 src/dot/mod.rs):

  • Cur(光标):只指向单个字符位置,相当于 vim 里的普通光标;
  • Range(范围):由两个光标(start 与 end)围成的闭区间,即真正的选区。

dot 还有一个重要的属性:活跃光标(active cursor)。扩展选区时,操作只作用在活跃端,另一端保持不动,这正是 kakoune 风格选区操作的基础。理解这一点,你就掌握了 ad 文本选择的底层逻辑。

快速上手:设置 dot 的基础移动快捷键

在 NORMAL 模式下,移动光标本质上就是"重新设置 dot"。这些操作集中在 src/mode/normal.rs 的键位表中,vim 用户会感到非常熟悉:

快捷键作用
hjkl左 / 下 / 上 / 右移动一个字符
w/b移动到下一个 / 上一个单词
x/X选中当前整行 / 整段
%选中整个缓冲区
gg/ge跳到缓冲区开头 / 结尾
Ctrl-h/Ctrl-l跳到行首 / 行尾
{/}移动到段落开头 / 结尾

注意wb的实现很巧妙:它们先扩展选区再折叠成光标(DotExtendForward+DotCollapseLast),这正是"以选区方式思考移动"的体现。

像老手一样扩展选区:从光标到选区

设置好起始位置后,下一步就是扩展 dot,把单个光标拉成真正的选区。ad 用大写字母和 Alt 组合键来区分"移动"与"扩展":

快捷键作用
H/L向左 / 右扩展一个字符
J/K向下 / 上扩展一行
W/B向前 / 后扩展一个单词
Alt-h/Alt-l扩展到行首 / 行尾
Alt-j/Alt-k向下 / 上扩展一行
Alt-{/Alt-}扩展到段落开头 / 结尾

这套设计(大写扩展、小写移动)比 vim 的v+ 移动组合更直接:先移动定位,再扩展选择,逻辑非常清晰。

文本对象选择:一条命令选中括号、引号内容

ad 同样支持 vim 风格的文本对象(TextObject),实现位于 src/dot/text_object.rs。最常用的是通过Alt-i加配对符号,一键选中成对定界符内部的内容:

  • Alt-i (/Alt-i ):选中括号()内部
  • Alt-i [/Alt-i ]:选中方括号[]内部
  • Alt-i {/Alt-i }:选中花括号{}内部
  • Alt-i "/Alt-i ':选中引号内部
  • Alt-i /:选中斜杠//定界符内部

例如光标停留在某个函数调用处,按Alt-i (,ad 会自动寻找最近的括号对并选中其中全部内容,随后可直接删除、复制或修改,无需手动数括号层级。

操纵 dot 的三大王牌操作

选区建立后,ad 提供三个高频"选区操纵"动作,配合;键附近的键位非常好记:

  • ;翻转活跃光标:让扩展方向从选区尾部切到头部,反向继续扩展;
  • ,折叠选区到起点:把选区收成起点处的单个光标;
  • Alt-,折叠选区到终点:收成终点处的光标。

配合*展开 dot@执行 dot(把选中文本当作命令执行,源自 acme 的经典玩法),选区就不再只是"要编辑的文本",而成了可以操作的对象。

选区编辑:delete、yank、paste 一条龙

选好文本之后,ad 对选区的基本操作与 vim 一致:

快捷键作用
d删除当前选区
c删除选区并进入 INSERT 模式
y复制(yank)选区
p粘贴
u/U撤销 / 重做

这里体现了 dot 机制的精髓:任何时刻你看到的反色高亮区域,就是下一个编辑命令的作用目标,所见即所选,所选即所改。

地址语法:用命令精确控制 dot 选区

如果你想更"程序员"地操控 dot,ad 继承了 sam/acme 的地址语法(见 docs/address-syntax.md 与 src/exec/addr.rs),可以在命令行中直接用表达式定位选区:

地址含义
.当前 dot
0/$缓冲区开头 / 结尾
5第 5 行
+3/-2向后 / 向前移动若干行
#10第 10 个字符
+/foo/向前搜索正则foo
-/foo/向后搜索正则foo

后缀+(行尾)、-(行首)、-++-(整行)可以对地址做二次精修,例如5-+表示"选中第 5 行整行"。

复合地址:一次选中大范围文本

更强大的能力来自复合地址——用逗号把两个简单地址连起来,就能框选任意区域:

  • 5,:从第 5 行到文件末尾;
  • ,10:从文件开头到第 10 行;
  • 5,20:从第 5 行到第 20 行;
  • /fn main/,/^}/:从fn main到第一个^},一键选中整个函数体。

在 COMMAND 模式(按:进入)中直接输入这些地址即可改变当前 dot,之后dyc等操作会立刻作用于新选区,适合做跨行、跨段的批量编辑。

上手练习:三个小场景快速建立肌肉记忆

  1. 选中并删除一个单词:光标移到词首 →W扩展一个词 →d删除;
  2. 重构括号内参数Alt-i (选中参数 →c修改 →Esc回到 NORMAL;
  3. 整体框选一个函数:+/fn/,/^}/设置选区 →y复制到别处粘贴。

结语

ad 编辑器的 dot 选区机制,把"光标、选区、编辑命令"统一成了同一个抽象,配合 vim 风格的移动、kakoune 式的扩展和 sam 风格的地址语法,构成了一个既熟悉又新鲜的高效编辑体验。建议你从移动和扩展快捷键开始,逐步尝试文本对象与地址命令,很快就能体会到"选区即对象"的流畅感。想深入了解,可以阅读项目内的 docs/tour 文档和内置的:help,祝你在 ad 编辑器里玩得开心!

【免费下载链接】adan adaptable text editor项目地址: https://gitcode.com/gh_mirrors/ad5/ad

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询