如何让Notepad++在保存文件时自动更新DateTime字段并递增Change数值
如何让Notepad++在保存文件时自动更新DateTime字段并递增Change数值
我帮你梳理一下亲测可行的实现步骤,核心是用Notepad++的PythonScript插件来完成——因为原生宏没法绑定到「保存前」的触发事件,而PythonScript能轻松实现这种自动操作:
第一步:安装PythonScript插件
- 打开Notepad++,点击顶部菜单栏的「Plugins」→「Plugins Admin」
- 在弹出的窗口搜索「PythonScript」,找到后勾选它,点击「Install」
- 等待安装完成后重启Notepad++
第二步:编写自动更新的Python脚本
- 重启后,点击「Plugins」→「PythonScript」→「New Script」
- 给脚本起个好记的名字,比如
AutoUpdateHeader.py,点击「Save」 - 把下面的代码粘贴到脚本编辑器里,然后保存:
import re from datetime import datetime import notepad def update_header_before_save(args): # 开始编辑操作,确保可以撤销 editor.beginUndoAction() # 获取当前文档的全部内容 content = editor.getText() # 1. 更新DateTime字段:替换$...$为当前短格式时间 # 生成和Ctrl+Shift+F4一致的时间格式 now = datetime.now().strftime("%l:%M %p %m/%d/%Y").strip() # 处理空的DateTime行($$) content = re.sub(r'(DateTime:\s+\$)\$', r'\1{}$'.format(now), content) # 处理已有内容的DateTime行,避免重复替换出错 content = re.sub(r'(DateTime:\s+\$).+?(\$)', r'\1{}\2'.format(now), content) # 2. 递增Change字段的数值 def increment_num(match): current_num = int(match.group(1)) return f'Change: ${current_num + 1}$' content = re.sub(r'Change:\s+\$(\d+)\$', increment_num, content) # 将修改后的内容写回文档 editor.setText(content) editor.endUndoAction() # 绑定「保存前」的触发事件 notepad.clearCallbacks([notepad.CALLBACK.BEFORE_SAVE]) notepad.callback(update_header_before_save, [notepad.CALLBACK.BEFORE_SAVE])
第三步:设置脚本随Notepad++启动自动加载
- 点击「Plugins」→「PythonScript」→「Configuration」
- 在「Initialization」选项里选择「At startup」
- 在左侧「Scripts」列表找到你创建的
AutoUpdateHeader.py,点击「Add」移到右侧「Loaded Scripts」 - 点击「OK」,重启Notepad++生效
测试效果
现在打开你的测试文件(比如带注释头的SQL文件),按Ctrl+S保存:
- 原来的
DateTime: $$会自动替换成当前短格式时间,比如DateTime: $2:42 PM 7/26/2024$ - 原来的
Change: $1$会自动递增成Change: $2$ - 之后每次保存都会自动更新这两个字段,完全符合你的需求
小提示
如果你的注释行缩进、空格数和示例不一样,可以微调脚本里正则表达式的\s+(匹配任意空白字符)部分,确保能精准匹配到目标行;时间格式也可以修改strftime里的参数,比如想要24小时制可以改成"%H:%M %m/%d/%Y"。
备注:内容来源于stack exchange,提问作者mnemotronic
相关产品推荐
相关产品推荐

