十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

结构正则表达式入门:用ad的EDIT模式实现强大的批量文本编辑 结构正则表达式入门用ad的EDIT模式实现强大的批量文本编辑【免费下载链接】adan adaptable text editor项目地址: https://gitcode.com/gh_mirrors/ad5/ad批量处理文本时大多数人第一反应是写脚本或使用 sed、awk但结构正则表达式提供了一条更优雅的路径把找到文本和处理文本拆分成一步步可组合的操作让复杂的批量文本编辑变得清晰可控。ad是一款可适应的 Rust 文本编辑器它借鉴了 Plan 9 中 sam 编辑器的结构正则表达式思想通过内置的EDIT 模式让你只需一条命令就能完成跨多行的查找、过滤、替换与重组。本文是面向初学者的结构正则表达式入门指南带你快速上手这个强大的批量文本编辑工具。什么是结构正则表达式普通正则表达式擅长匹配一行或一段连续字符而结构正则表达式擅长处理文本的结构。它不要求你一次写出完美的大正则而是允许你分步骤逼近目标先用循环命令切出感兴趣的区域如每个函数、每个段落再用过滤命令剔除不关心的内容最后对保留下来的部分执行插入、删除、替换或打印。这种先定位、再操作的方式特别适合处理代码文件、日志、配置文件等多行结构文本。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/拆开来看y/\n\n/—— 按空行把选区切成一个个段落x/*occupation: programmer*/—— 只保留包含该职业的段落x/name: (.*)/—— 在段落内提取姓名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),仅供参考
返回列表