当前位置: 首页 > news >正文

结构正则表达式入门:用ad的EDIT模式实现强大的批量文本编辑

结构正则表达式入门:用ad的EDIT模式实现强大的批量文本编辑

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

批量处理文本时,大多数人第一反应是写脚本或使用 sed、awk,但结构正则表达式提供了一条更优雅的路径:把"找到文本"和"处理文本"拆分成一步步可组合的操作,让复杂的批量文本编辑变得清晰可控。ad是一款"可适应"的 Rust 文本编辑器,它借鉴了 Plan 9 中 sam 编辑器的结构正则表达式思想,通过内置的EDIT 模式,让你只需一条命令就能完成跨多行的查找、过滤、替换与重组。本文是面向初学者的结构正则表达式入门指南,带你快速上手这个强大的批量文本编辑工具。

什么是结构正则表达式?

普通正则表达式擅长匹配"一行"或"一段连续字符",而结构正则表达式擅长处理"文本的结构"。它不要求你一次写出完美的大正则,而是允许你分步骤逼近目标

  1. 先用循环命令切出感兴趣的区域(如每个函数、每个段落);
  2. 再用过滤命令剔除不关心的内容;
  3. 最后对保留下来的部分执行插入、删除、替换或打印。

这种"先定位、再操作"的方式,特别适合处理代码文件、日志、配置文件等多行结构文本。

ad 的 EDIT 模式是什么?

ad是一款融合了 vim 模态编辑、kakoune 多光标思想与 acme 可扩展理念的编辑器。它的模式除了常见的 NORMAL、INSERT、COMMAND、RUN 之外,还有一个专门执行结构正则表达式EDIT 模式,其命令语言源自 Plan 9 的 sam 编辑器。

在 EDIT 模式中,你只需输入:

Edit , s/mouse/clicky thing/g

即可把整个缓冲区中所有mouse替换为clicky thing——这看起来和 sed 很像,但真正的威力在于下面这些命令的组合。

核心命令速查表:一次掌握批量文本编辑

命令含义典型用途
s/re/template/替换全文替换(等价于x/re/ c/template/
x/re/循环匹配对每个匹配执行后续操作
y/re/在匹配之间循环按分隔符把文本切成块
g/re/过滤匹配只保留匹配的行或块
v/re/过滤非匹配排除匹配的行或块
i/template/匹配前插入批量添加前缀
a/template/匹配后插入批量添加后缀
c/template/替换每个匹配批量改写
d删除每个匹配批量删除
p/template/按模板打印提取信息生成报告

命令前的地址(如,表示整个缓冲区,14,24表示第 14 到 24 行)决定了操作范围,这也来自 sam 的 dot 思想——ad把"当前选区"当作一个可移动、可叠加的焦点,src/exec/addr.rs 中实现了这套地址解析。

实战一:批量删除与替换

删除所有空行,只需一条命令:

Edit , x/^\n/ d

把每个单词改为大写开头的占位符:

Edit , x/\b\w+\b/ c/{0}/

实战二:用嵌套命令处理多行结构

结构正则表达式最迷人的地方在于嵌套组合。下面这个例子来自官方教程 docs/tour/structural-regex2:从第 14 到 24 行中,找出所有职业为 programmer 的人名并打印。

Edit 14,24 y/\n\n/ x/@*occupation: programmer@*/ x/name: (.*)/ p/{1} is a programmer\n/

拆开来看:

  1. y/\n\n/—— 按空行把选区切成一个个段落;
  2. x/@*occupation: programmer@*/—— 只保留包含该职业的段落;
  3. x/name: (.*)/—— 在段落内提取姓名;
  4. p/{1} is a programmer\n/—— 用模板输出结果。

一次执行,直接生成Alice is a programmer这样的报告。这就是结构正则表达式"分步定位"的核心优势。

实战三:模板变量让批量编辑更强大

除了{0}(整个匹配)、{1}{2}(捕获组)之外,ad的模板还支持三个上下文变量:{FILENAME}{ROW}{COL}。这在脚本化提取信息时非常有用。

项目自带的示例脚本 examples/scripts/result_fns.ad 演示了如何扫描 Rust 文件中所有返回Result的函数:

, x/fn@*?\{/ g/->.*Result.*\{/ x/fn (\w+)@*?-> (.*?) \{/ p/({FILENAME}) {1} returns {2}\n/

流程清晰:选中全文 → 找到函数签名 → 过滤出返回 Result 的 → 提取函数名和返回类型 → 打印带文件名的报告。配合ad -f 脚本路径 文件路径的命令行模式,你甚至可以把这些操作固化成可复用脚本,比如 examples/scripts/impl_blocks.ad 和 examples/scripts/fancy_impl_blocks.ad 展示了如何从源码中批量提取 impl 块及其函数签名。

更进一步:深入 ad 的实现

  • 结构正则表达式的解析与执行引擎:src/exec/mod.rs
  • 地址语法与 dot 操作:src/exec/addr.rs
  • 命令运行器(支持执行外部命令):src/exec/runner.rs
  • 自研的正则引擎(可处理字符流):src/regex/
  • 更完整的命令列表:docs/tour/structural-regex

小结

结构正则表达式的学习曲线并不陡峭:只需记住x(循环)、y(切块)、g/v(过滤)这几个组合子,再加上i/a/c/d/p几个动作,就足以应付绝大多数批量文本编辑场景。而ad把这一整套能力放进了 EDIT 模式,让你在编辑器内就能完成从"定位"到"改写"的完整流程。如果你经常面对多行结构文本,不妨从今天的一条Edit , x/.../ c/.../命令开始,体验这种更接近思维过程的编辑方式。

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

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

http://www.cnnetsun.cn/news/4135765.html

相关文章:

  • Excel批量隐藏与保护公式:从原理到VBA自动化实战
  • 拖延症自救!亲测这6款AI论文软件,从构思到降重全程逆袭
  • ROS机器人开发入门:Topic与Service通信机制详解与实战
  • 深入解析SQLite B-Tree平衡算法:从原理到工程实现
  • 蓝桥杯国赛模拟题核心解法:事件驱动与状态快照
  • VnCoreNLP性能实测:处理10万条越南语新闻需要多久?与NLP-progress基准全面对比
  • 单片机计算机毕设之基于 STM32 的车载环境参数阈值可调智能控制系统设计 基于 STM32 的 OLED 显示车载雨温传感智能执行系统设计(013404)
  • 用JSONC优化表单提交:3步让POST请求体积大幅下降
  • 前端动画布局与自定义属性实践
  • 构建之后如何运行容器?gradle-docker 的 DockerRun 任务实战(端口映射/环境变量/数据卷)
  • 如何用Kiwix书签打造个人离线知识库?8个实用技巧
  • 训练交付前的检查
  • 基于Docker Compose的云速工具箱开发环境搭建实战指南
  • 投影仪选购避坑指南:聚焦亮度、芯片与系统三大核心
  • 白鲨优化算法(WSO)原理详解与Matlab实现:解决复杂优化问题
  • 如何在10分钟内跑起AMA Protocol本地测试网?保姆级教程
  • 基于拓扑意识场论(TCFT)的碳硅共生体法律主体资格核心标准详析
  • AI短剧制作全流程拆解:从脚本到成片的工程化实践指南
  • 从模型里删掉汽车:Erasing Concepts from Diffusion Models物体擦除实战
  • 基于AI与混合搜索的企业知识库构建:从语义检索到RBAC权限管理
  • Enterprise Commerce 重定向优化:如何用布隆过滤器处理数万条重定向零延迟
  • 2026年Java面试题库与备考策略全解析
  • EmbodiedScan多视角3D检测实战:从零训练你的第一个检测模型(附完整命令)
  • 基于Spring Boot与Vue的论坛数据可视化系统全栈开发实战
  • zigbee_home传感器类型大盘点:12种传感器配置快速参考指南
  • 从零部署本地AI智能体:基于WorkBuddy与Ollama的实战指南
  • 人形机器人退潮,场景化落地成为AI与机器人行业新焦点
  • 基于SSM的智能密室逃脱信息管理系统(毕业设计项目源码+文档)
  • 打造专属无线控制器:AbletonOSC+TouchOSC连接Ableton Live实战教程
  • 从零认识AMA Protocol:隐私Layer 1如何赋能AI智能体经济