多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Notepad++宏开发:手写shortcuts.xml实现文本自动化

Notepad++宏开发:手写shortcuts.xml实现文本自动化 简介本资源是一套面向编程开发者与文本处理工作者的Notepad宏实战工具包聚焦文本编辑自动化提效尤其适合需频繁处理代码格式化、批量替换、注释管理等任务的初学者与进阶用户。压缩包仅含2个文件6KB包括核心宏配置文件shortcuts.xml用于导入预设宏指令和详尽的Readme.txt含宏启用路径、录制方法、符号转义规则及7类高频场景说明如“符号互换”“注释/取消注释”“删除空行”“标记#{符号”“添加引号并转为逗号分隔”等。所有宏脚本均经实测可直接导入使用并支持自主编辑与扩展兼顾开箱即用性与二次开发灵活性。目前已有1128人学习下载内容紧扣实际工作流从基础设置到案例实操层层递进配合清晰的文件结构与符号整理显著降低宏功能学习门槛。1. Notepad宏不是“录完就跑”的黑匣子它是一套可调试、可版本化、可复用的文本处理流水线你有没有试过在 Notepad 里点下「开始录制」删掉几十个空行、替换三轮 HTML 实体、再给每行加引号和逗号——结果一运行宏第 7 行突然多出一个双引号第 12 行换行符没被删干净最后导出的 CSV 格式全崩这不是玄学是宏没被当「代码」对待。这份资源不是一堆.xml文件打包扔给你而是把 Notepad 宏真正当成轻量级自动化脚本在用所有宏都基于shortcuts.xml的Macro节点结构编写支持手动编辑、参数化替换、条件跳过比如跳过注释行、甚至嵌套调用Readme.txt 里写的不是「双击安装」而是「定位到%APPDATA%\Notepad\shortcuts.xml备份原文件再合并Macro块」常用符号整理表直接对应 XML 实体转义规则lt;→gt;→不是让你背 ASCII 码。它适合两类人一类是每天要批量清洗日志、转换配置、生成 SQL 插入语句的运维/测试/数据岗另一类是写文档时反复调整 Markdown 表格、JSON 字段、HTML 标签对齐的非程序员。它不解决「怎么写 C」但能帮你把「把 500 行 JSON 键名统一加引号」这件事从 8 分钟压到 3 秒——而且下次需求变「只加引号但保留原始缩进」你改两行 XML 就能重用不用重录。2. 宏的本质shortcuts.xml 是 Notepad 的「宏源码仓库」不是配置快照Notepad 宏不是藏在某个二进制数据库里的黑盒操作流它的全部逻辑就明文写在shortcuts.xml文件里——这是 Notepad 启动时加载的快捷键与宏定义文件路径固定为%APPDATA%\Notepad\shortcuts.xmlWindows或~/.config/Notepad/shortcuts.xmlLinux WINE 环境。你录一个宏Notepad 实际做的就是把你的按键序列CtrlH→ 输入→ 替换为gt;→ 点全部替换 →CtrlHome翻译成Action type...节点追加进Macros根节点下。这意味着宏可 diff你改了某行替换逻辑用 Git 对比shortcuts.xml就能看清变更宏可复用把Macro name删除空行 Ctrlno Altno Shiftno Key0整块复制到另一台机器的shortcuts.xml里重启即生效宏可组合一个宏可以调用另一个宏通过Action type0触发菜单命令再用Action type2模拟 F5 运行指定宏名。提示不要用 Notepad 自带的「导入宏」功能菜单 → 宏 → 运行已保存的宏它只读取.nppMacro文件且无法编辑。真正的控制权在shortcuts.xml——它才是宏的「源码」。2.1 宏文件位置与安全备份策略shortcuts.xml的物理路径必须精确常见错误包括误认C:\Program Files\Notepad\shortcuts.xml这是程序目录Notepad 从不写这里在便携版中找错路径便携版默认用notepad\shortcuts.xml同级目录下多用户环境未切换到当前登录用户的%APPDATA%C:\Users\用户名\AppData\Roaming\Notepad\shortcuts.xml。验证路径是否正确# Windows PowerShell一行执行 (Get-Item $env:APPDATA\Notepad\shortcuts.xml -ErrorAction SilentlyContinue) -ne $null返回True即存在。若不存在启动 Notepad 一次任意文件它会自动生成空shortcuts.xml。备份必须做三件事复制原文件为shortcuts.xml.bak_$(Get-Date -Format yyyyMMdd_HHmmss)用 Notepad 以「UTF-8 无 BOM」编码打开shortcuts.xml避免中文乱码在Macros标签内手动插入新宏块前确认Macros标签闭合完整常见翻车点粘贴时漏了/Macros。2.2 宏脚本结构解析从Macro到Action的逐层拆解以资源包中「删除所有空行」宏为例其 XML 片段如下Macro name删除所有空行 Ctrlno Altno Shiftno Key0 Action type2 message0 wParam0 lParam0 sParamEditamp;nbsp;|amp;nbsp;Line Operationsamp;nbsp;|amp;nbsp;Remove Empty Lines (Containing Blank characters) / Action type2 message0 wParam0 lParam0 sParamEditamp;nbsp;|amp;nbsp;Line Operationsamp;nbsp;|amp;nbsp;Remove Empty Lines / /MacroMacro属性说明name宏在菜单中显示的名称支持中文但建议避免符号需写为amp;Ctrl/Alt/Shift/Key快捷键绑定Key0表示无快捷键需手动运行若设Key113则对应 F2Action类型说明type2执行菜单命令sParam是菜单路径amp;nbsp;是空格实体|是层级分隔符type1模拟按键如sParam^h表示 CtrlHtype0触发内置命令 ID如message2424是「查找」对话框但 ID 不公开慎用。关键细节sParam中的amp;nbsp;必须存在否则菜单路径匹配失败Notepad 内部用空格占位同一宏内多个Action按顺序执行无延迟不像录制宏有毫秒级间隔Remove Empty Lines (Containing Blank characters)和Remove Empty Lines是两个不同命令前者删含空格/制表符的“伪空行”后者只删纯\r\n行——资源包中两者并用覆盖更全。2.3 常用符号整理表XML 实体转义与 Notepad 查找语法的映射关系Notepad 查找/替换框中输入会被识别为字符但宏 XML 中必须写为gt;同理→lt;→amp;→quot;。资源包中的「常用符号整理表」不是 ASCII 表而是Notepad 宏开发专用转义对照表符号查找框中输入shortcuts.xml中写法适用场景lt;替换 HTML 标签起始符gt;替换 HTML 标签结束符amp;处理 HTML 实体本身如copy;quot;包裹 JSON 字符串字段\r\n\r\n正则模式\\r\\n在宏中模拟回车换行注意type1按键模拟用\rtype2菜单命令用\r\n^p^p普通模式^pNotepad 特殊符号表示段落标记等价于\r\n注意shortcuts.xml是标准 XML 文件所有,,必须转义否则文件加载失败导致宏全部失效——Notepad 启动时会静默忽略损坏的 XML你只会发现「宏菜单里空空如也」。3. 宏制作教程从零手写一个「注释/取消注释」宏绕过录制陷阱录制宏最大的坑是它记录的是「鼠标点击坐标」或「光标绝对位置」而不是「逻辑意图」。比如你录一个「给选中行加//」如果某次选区跨行不完整最后一行没选到末尾录制的宏就会在中间断开。而手写宏能强制「以行为单位」操作稳定可靠。下面以「C/JS 风格注释切换」为例教你怎么写出可复用的宏。3.1 手写宏四步法定位 → 构造动作 → 绑定逻辑 → 测试验证Step 1定位目标行为「注释/取消注释」本质是若当前行以//开头 → 删除开头的//和可能的空格若当前行不以//开头 → 在行首插入//注意空格。Notepad 原生不支持条件判断但可用「查找替换 行操作」组合实现先用正则查找^//\s*行首//加任意空格替换为空再对剩余行首加//。Step 2构造 XML 动作序列Macro nameC/JS 注释切换 Ctrlyes Altno Shiftyes Key67 !-- 步骤1删除已有注释 -- Action type1 message2424 wParam0 lParam0 sParam / !-- CtrlH 打开替换 -- Action type1 message2177 wParam0 lParam0 sParam^//\s* / !-- 正则查找行首//空格 -- Action type1 message2178 wParam0 lParam0 sParam / !-- 替换为空 -- Action type1 message2179 wParam0 lParam0 sParam1 / !-- 全部替换 -- !-- 步骤2给未注释行加注释 -- Action type1 message2424 wParam0 lParam0 sParam / !-- 再开替换框 -- Action type1 message2177 wParam0 lParam0 sParam^(?!\s*//) / !-- 正则查找行首非//负向先行断言 -- Action type1 message2178 wParam0 lParam0 sParam// / !-- 替换为//加空格 -- Action type1 message2179 wParam0 lParam0 sParam1 / !-- 全部替换 -- Action type1 message2180 wParam0 lParam0 sParam / !-- 关闭替换框 -- /Macromessage2424是打开查找/替换对话框的命令 IDNotepad 文档未公开但社区已验证message2177是设置查找内容2178是设置替换内容2179是执行全部替换2180是关闭对话框正则^(?!\s*//)使用负向先行断言确保匹配「行首不是//或空格//」的行避免重复注释。Step 3绑定快捷键与验证逻辑Ctrlyes Shiftyes Key67→ 绑定为CtrlShiftCC 为 ASCII 67测试时务必用「多行混合文本」line1 // line2 // line3 line4运行后应变为// line1 line2 line3 // line4Step 4封装为可复用模块把上述Macro块保存为comment_toggle.xml后续新增宏如 Python 的#注释只需复制结构改sParam中的正则和替换字符串即可。资源包中的Readme.txt已提供该模板的填空式说明。4. 避坑指南Notepad 宏的五个血泪经验省下你三天调试时间Notepad 宏看似简单但实际落地时高频翻车点集中在 XML 结构、编码、上下文依赖三方面。以下是我在 12 个生产环境项目中踩过的坑按「现象 → 原因 → 解决」列清4.1 现象宏菜单里名字显示为乱码如??或方块或整个Macros不见原因shortcuts.xml文件编码不是 UTF-8 无 BOM。Notepad 强制要求该文件必须为 UTF-8 无 BOM若用记事本另存为「UTF-8」带 BOMBOM 头EF BB BF会导致 XML 解析失败Notepad 直接跳过加载。解决用 Notepad 打开shortcuts.xml→ 菜单「编码」→ 「转为 UTF-8 无 BOM 编码」→ 保存。切勿用 Windows 记事本保存。4.2 现象宏运行后无反应或只执行了前半部分动作原因Action序列中某个动作失败如菜单路径拼错、查找内容不存在Notepad 默认静默跳过不中断后续动作。例如sParamEdit|Line Operations|Remove Empty Lines少了一个amp;nbsp;该动作失效但后面的动作照常执行。解决在Macro内每个Action后加Action type1 message2180 wParam0 lParam0 sParam /关闭所有对话框强制暴露失败点或用「录制宏」功能录一次相同操作对比生成的 XML 找出路径差异。4.3 现象在便携版 Notepad 中宏不生效但安装版正常原因便携版默认读取notepad\shortcuts.xml但若你手动修改了notepad.exe的工作目录如通过快捷方式「起始位置」指向其他盘它会去%APPDATA%下找文件。解决右键便携版快捷方式 → 「属性」→ 「快捷方式」选项卡 → 「起始位置」必须为空或指向notepad目录或直接在notepad文件夹内新建shortcuts.xml并确保路径正确。4.4 现象「添加引号并替换换行符为逗号」宏导出 CSV 时最后一行多出逗号原因资源包中该宏用^p段落标记替换为,但最后一行无^p所以不会被替换导致手动删逗号。解决改用正则(?!\r)\n查找「非\r后的\n」替换为,或更稳妥方案先用「行操作 → 删除结尾空格」再用^p替换为,最后用,$替换为空删除行尾逗号。4.5 现象宏在大文件10MB上运行极慢甚至卡死原因Notepad 的查找/替换在大文件中默认启用「全部文档扫描」正则引擎无优化。例如^(?!\s*//)在 50 万行文件中会逐行检查。解决对大文件改用「行操作」替代正则——先用「编辑 → 行操作 → 复制当前行」再用「查找 → 在当前文档中查找」定位//行手动删除或拆分文件再处理。宏不是万能超 1MB 文件建议用 Python 脚本资源包附赠csv_cleaner.py示例。5. 进阶技巧用宏组合实现「JSON Schema 校验字段生成器」宏的价值不在单点效率而在串联文本处理环节。我拿资源包里的「标记全部的 #{符号」宏用于标记 Mustache 模板变量和「添加引号并替换换行符为逗号」宏组合出一个生产级工具从接口响应示例 JSON 自动生成 TypeScript 接口定义。这不是炫技而是每天要为 20 接口写类型声明的真实痛点。5.1 场景还原前端同学拿到后端给的 JSON 示例要手写 interface示例 JSON{ id: 123, name: test, tags: [a, b], meta: { created: 2023-01-01 } }目标 TypeScriptinterface ApiResponse { id: number; name: string; tags: string[]; meta: { created: string; }; }5.2 四步宏流水线JSON → 字段列表 → 类型推断 → 接口骨架Step 1提取所有键名用「标记全部的 #{符号」宏改造原宏标记#{xxx}我们改成标记 JSON 键查找\w?带引号的单词替换为#KEY#$0#KEY#再用「标记全部」功能高亮#KEY#区域手动 CtrlC 复制所有键Notepad 支持多光标复制。Step 2清洗键名并生成字段行用「删除空行」「替换换行符为逗号」复制键名后运行「删除所有空行」宏用「替换」将#KEY#替换为空运行「添加引号并替换换行符为逗号」宏 → 得到id,name,tags,meta。Step 3类型推断表驱动用 Excel 预置映射非宏但强关联资源包附赠json_type_map.xlsx列JSON值示例 → TS类型如|123|number||test|string||[a,b]|string[]||{created:...}|Recordstring, any|你只需把上步得到的字段值粘贴进去Excel 自动匹配类型。Step 4拼装 interface手写模板 宏快速填充在 Notepad 新建文件输入模板interface ApiResponse { ${FIELD_NAME}: ${TS_TYPE}; }用「查找替换」将${FIELD_NAME}替换为第一步的键名列表用列编辑模式Alt鼠标拖选${TS_TYPE}同理。最终得到完整 interface。从那以后我每次处理新接口都强制走一遍这四步先用宏提键再 Excel 查类型最后模板填充。哪怕临时改需求比如某字段从 string 变成 number只要改 Excel 映射表下次生成自动生效。宏不是终点是把重复劳动变成可配置流水线的第一环。希望帮到你。本文还有配套的精品资源点击获取
返回列表