《elisp 每日一练》——文本插入、删除、替换 对于文本操作的增删改查我在前一天已经了解了关于查相关的操作。今天我们来了解增删改。背景知识文本增删比较简单我们只需要确定光标位置然后调用相关函数即可。文本的增加或者说插入我们通过函数insert来执行。它的函数原型如下:(insertrest ARGS)它用来在光标所在位置之后插入对应文本从函数定义上我们知道这个函数后面可以跟一个或者多个参数。也是就是说我们实际上可以一次插入多个字符串。我们需要注意的是光标和mark的变化插入结束之后光标位于插入文本的末尾而mark由Emacs维护它会随着文本的变化而变化。删除我们使用函数delete-region它的函数原型如下:(delete-regionSTART END)它用来删除从START到END区域内的文本。而光标位置会在原来的基础上减去被删除的字符数。而mark因为是由Emacs自己维护的所以如果mark位于START之前那么它的位置不会发生变化在END之后它的位置会相应的减去END - START的值。如果在START和END之间那么它会被放到START的位置。增加和删除比较简单光标和mark位置的变化也跟我们平时使用编辑器的习惯一致。这个部分稍微复杂一些的操作是修改。一般来讲修改之前会进行查找并且对匹配上的部分进行修改所以它天然的就离不开正则表达式。Emacs 中通过函数replace-match来进行。它的函数原型如下:(replace-matchNEWTEXT optional FIXEDCASE LITERAL STRING SUBEXP)它的核心参数为:NEWTEXT: 替换后的新文本FIXEDCASE: 如果为nilEmacs在替换时采用智能大小写机制。(例如原词是大写替换词也会自动转大写)如果为t会强制按照NEWTEXT的原始值LITERAL: 若为t则NEXTTEXT被视为纯文本否则允许在 NEWTEXT 中使用\1、\2来引用正则捕获组SUBEXP: 指定只替换第 N 个捕获组而不是整个匹配项另外在上一篇我们知道Emacs中匹配结果非常脆弱它永远只保留最近一次匹配的结果。我们应该即时通过match-string获取并保存结果。但是如果我们确实需要在后续再重新获取怎么办Emacs提供了一个保护现场的函数save-match-data。到这里我们已经知道了三个保存现场的函数save-excursion、save-restriction、save-match-data。练习到这里我们已经可以尝试对文本进行操作了。我们来尝试一下将所有foo_为前缀的函数替换为my/foo_。因为Emacs 中的函数定义以(defun开头所以我们实际上匹配的就是(defun foo_下面是我的实现(defunmy/profix-internal-functions()(interactive)(let((count0))(save-excursion(save-restriction(widen)(goto-char(point-min))(while(re-search-forward(defun \\(foo_[a-zA-Z0-9-]\\)nilt)(setqcount(1 count));; 用 \1 引用捕获匹配到的函数名称, 参数t表示维持原来的大小写 参数3为nil表示替换的字符串中允许使用 \1 这种来匹配原来的捕获(replace-match(defun my/\\1tnil))))(message重构完成共修改 %d 个函数名count)))到此我们已经掌握了移动光标和操作文本的大部分操作了。基于此我们就可以完成日常操作文本的任务了。后面我们将对之前的内容进行一个总结并完成一个基础的小功能。敬请期待

相关新闻

最新新闻

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现 【免费下载链接】serenity The Serenity Operating System 🐞 项目地址: https://gitcode.com/GitHub_Trending/se/serenity 导读 本文以 getopt(3) 手册 为核心&a…

2026/10/5 3:18:56
轻量服务器还是ECS?大促云服务器选购与避坑实战指南

轻量服务器还是ECS?大促云服务器选购与避坑实战指南

每年大促节点,群里永远有人在问同一个问题:“38元的轻量服务器到底怎么抢?为什么我每次点进去都是已售罄?68元直购和99元的ECS我到底选哪个?”作为一个常年帮团队和自己采购云服务器的老用户,我太清楚这种纠…

2026/10/5 3:42:18
为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南 【免费下载链接】agents Multi-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity 项目地址:…

2026/10/5 19:39:38
PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署 【免费下载链接】PaddleOCR Turn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between i…

2026/10/5 16:06:34
Spring源码解析:构造器注入的类型转换与候选匹配机制

Spring源码解析:构造器注入的类型转换与候选匹配机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 5:51:09
openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由 【免费下载链接】openai-agents-python A lightweight, powerful framework for multi-agent workflows 项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-pyth…

2026/10/5 5:40:36

日新闻

周新闻

月新闻