像Acme一样加载文本:ad编辑器plumbing rules入门教程

像Acme一样加载文本:ad编辑器plumbing rules入门教程 像Acme一样加载文本ad编辑器plumbing rules入门教程【免费下载链接】adan adaptable text editor项目地址: https://gitcode.com/gh_mirrors/ad5/ad如果你厌倦了打开编辑器 → 找文件 → 跳转行号这种繁琐的流程那么 ad 编辑器 一定会让你眼前一亮。作为一个可适应的文本编辑器an adaptable text editorad 把 Plan9 经典编辑器 Acme 的核心理念——文本不仅是内容更是可以交互的指令——带进了现代终端。而这一切的枢纽就是今天要介绍的plumbing rules 入门教程一套让 ad 编辑器帮你看懂文字、自动完成加载文本与执行命令的规则系统。简单说你只需把光标放在一个文件路径上按回车ad 就会自动帮你打开它。ad 编辑器是什么ad 是由 Rust 编写的终端文本编辑器它试图把 vim/kakoune 的模态编辑体验与 Plan9 Acme 的扩展哲学融合在一起。在 ad 中文字既可以编辑也可以被执行——这正是它与普通编辑器的最大区别。如上图所示ad 支持多缓冲区、语法高亮、状态栏等现代编辑器的基本能力但它真正的杀手锏藏在对文本的加载load与执行execute之中。什么是 plumbing rulesplumbing管道概念源自 Plan9 系统的 plumber 守护进程它接收一条包含文本内容的消息根据预定义的规则把这条消息发送到最合适的处理程序。ad 借鉴了这一设计在 src/plumb.rs 中实现了一套轻量的消息路由机制。每条 plumbing 消息都包含以下字段字段含义src消息来源例如ad或bashdst消息目标端口wdir工作目录当 data 是文件名时非常重要cur光标在 data 中的偏移位置attrs附加的键值对属性data消息的文本内容本体完整的消息格式可以参考测试样例 data/plumbing_tests/messages/valid/all-fields.txt。两种触发方式加载与执行在 ad 中你可以用两种方式激活一段文本加载文本把光标放在文本上按Enter或者用鼠标右键点击执行文本把光标放在文本上按或者用鼠标中键点击。加载时ad 会把当前选中的文本打包成一条 plumbing 消息交给规则系统处理执行时则直接把文本当作 shell 命令运行输出会进入一个$dir/output缓冲区。这两条路径的入口都在 src/editor/actions.rs。默认规则开箱即用的惊喜ad 内置了一套相当实用的默认规则存放在 data/plumbing.rules规则按先匹配先生效的顺序执行。来看看它默认能做什么你加载的文本ad 会自动做什么一串 Git commit hash如a1b2c3d...用git show显示提交内容一个 URL如https://example.com用浏览器打开一个图片文件路径用图片查看器打开一个 PDF 文件路径用 PDF 阅读器打开文件路径:行号:列号打开文件并定位到指定位置命令名(1)man 条目显示对应的 man page其中最实用的一条是文件:行号:列号规则当你在终端复制出编译器报错信息如src/main.rs:42:17并加载它时ad 会直接打开该文件并把光标跳到第 42 行第 17 列——报错定位从此告别手动数行号。规则的语法模式 动作一条 plumbing 规则由模式patterns和动作actions两部分组成所有模式都匹配成功后才依次执行动作。用到的文件可以看 data/plumbing.rules规则解析逻辑在 src/plumb.rs。常用的模式关键字关键字作用data matches 正则数据内容匹配正则捕获组存入$1、$2…arg isfile $0参数是一个存在的文件arg isdir $0参数是一个存在的目录attr add 键值给消息添加属性src is ad消息来源是指定程序data from 命令用命令的输出替换消息数据常用的动作关键字关键字作用plumb to edit把消息交给 ad 处理打开文件plumb start 命令在外部启动一个程序变量方面$0是正则完整匹配$1~$9是捕获组$data、$wdir、$src、$file则对应消息字段。注意 ad 的data matches用的是自带的正则引擎语法与常规正则略有差异。动手编写你的第一条自定义规则假设你希望加载形如todo:123的文本时自动跳转到todo.md的第 123 行可以这样写# todo:123 - 打开 todo.md 并跳转到 123 行 data matches todo:([0-9]) attr add addr$1 data set todo.md plumb to edit把规则追加到~/.ad/plumbing.rulesad 默认读取该文件并重启即可生效。这里的addr属性就是让 ad 定位行号的钥匙相关处理逻辑在 src/editor/actions.rs。再比如模仿默认规则给图片添加你自己的查看器data matches ([a-zA-Z0-9_\-./])\.(png|jpg) arg isfile $0 plumb start feh $0规则里的变量与格式要求可以参考完整样例 data/plumbing_tests/rules/valid/everything.txt。如何验证你的规则ad 仓库里自带了一套非常完整的规则测试集位于 data/plumbing_tests/rules/valid与rules/invalid规则解析的正确/错误用例messages/valid与messages/invalid消息解析的正确/错误用例match-tests规则匹配过程的行为描述。另外tests/data/editor-scenarios/plumbing/ 下的场景测试展示了加载文件后回车在同一窗口打开、Alt回车在新窗口打开等真实交互行为。写规则时不妨对照这些用例来调试自己的正则与逻辑。进阶理解消息的流转当你按下回车加载文本时ad 内部发生的是这样一个流程见 src/editor/actions.rs构造一条 plumbing 消息src为adwdir为当前缓冲区所在目录依次用每条规则尝试匹配消息匹配成功且动作为plumb to edit时根据attrs中的action、addr、filename决定是打开文件、跳转地址还是新建缓冲区显示数据动作为plumb start时在 shell 中异步启动外部程序全部规则都不匹配时退回到默认行为尝试把文本当路径打开。想深入了解协议的原始设计可以翻阅 docs/9p.md 以及 ad 提供的 9p 文件系统接口实现。小结Plumbing rules 把编辑器从被动的内容容器变成了主动的文本路由中心。掌握了这套规则你就能像 Acme 用户一样让 ad 编辑器 自动识别 URL、文件路径、报错定位甚至 Git 提交真正实现所见即可加载加载即所达。这或许就是可适应文本编辑器最迷人的地方规则在手万物可通。小提示ad 目前仍处于快速迭代阶段默认按键和规则可能随版本调整。动手实验前记得先用内置的:help查看当前版本的说明并查阅 CHANGELOG.md 了解变更。【免费下载链接】adan adaptable text editor项目地址: https://gitcode.com/gh_mirrors/ad5/ad创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考