如何在Notepad++中删除不含指定字符串的行并优化宏替换功能?
实现动态关键词的类Grep过滤(Notepad++宏增强)
当然可以实现!你的现有宏是固定搜索IM1 001,要改成动态使用选中文本或通配符,有两种实用方案,下面一步步来:
方案1:用选中文本作为动态搜索关键词(推荐)
Notepad++原生宏没法直接获取选中文本,所以得借助PythonScript插件来实现这个动态功能,步骤很简单:
安装PythonScript插件
- 打开Notepad++,点击「Plugins > Plugins Admin」,搜索
PythonScript并安装,之后重启Notepad++。
- 打开Notepad++,点击「Plugins > Plugins Admin」,搜索
创建自定义脚本
- 点击「Plugins > PythonScript > New Script」,命名为
DynamicGrepFilter.py,粘贴以下代码:
这段代码的作用是直接删除所有不包含当前选中文本的行,完美替代你原来「标记-删除未标记行」的手动流程。editor.rereplace(r'^(?s)(?!.*' + editor.getSelText() + r').*$\r?\n?', '')
- 点击「Plugins > PythonScript > New Script」,命名为
绑定快捷键
- 点击「Plugins > PythonScript > Configuration」,在「Scripts」列表里找到
DynamicGrepFilter.py,点击「Add」把它移到「Menu Items」里。 - 打开「Settings > Shortcut Mapper > Plugin Commands」,找到
DynamicGrepFilter,设置你顺手的快捷键(比如Ctrl+Shift+G)。
- 点击「Plugins > PythonScript > Configuration」,在「Scripts」列表里找到
使用方法
- 选中你要搜索的任意关键词(比如
IM1 001或其他字符串),按下设置的快捷键,瞬间就会保留所有包含该关键词的行。
- 选中你要搜索的任意关键词(比如
方案2:修改宏以支持通配符/正则表达式
如果你只想用固定的通配符模式(比如匹配所有IM1开头的行),可以直接修改shortcuts.xml里的宏,调整搜索模式和关键词:
- 先关闭Notepad++,找到
shortcuts.xml(一般在%APPDATA%\Notepad++文件夹里)。 - 修改你的
grep01宏,调整搜索模式和关键词:<Macro name="grep01" Ctrl="no" Alt="no" Shift="no" Key="0"> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <!-- 开启通配符模式:wParam=1表示启用通配符 --> <Action type="3" message="1625" wParam="1" lParam="0" sParam="" /> <!-- 通配符关键词,比如匹配IM1开头的任意行 --> <Action type="3" message="1601" wParam="0" lParam="0" sParam="IM1 *" /> <Action type="3" message="1702" wParam="0" lParam="784" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1615" sParam="" /> <Action type="2" message="0" wParam="43051" lParam="0" sParam="" /> </Macro>- 要是想用正则表达式,把
message="1625"改成message="1627"(开启正则模式),然后sParam写正则规则,比如sParam="IM1 \d{3}"就能匹配IM1后跟三位数字的行。
- 要是想用正则表达式,把
- 保存
shortcuts.xml,重启Notepad++,按下宏的快捷键就能用通配符/正则过滤了。
补充说明
- 方案1的Python脚本灵活性拉满,支持任意选中文本作为关键词,完全替代手动操作;
- 方案2适合固定模式的批量过滤,不用每次选中文本。
内容的提问来源于stack exchange,提问作者Sammy Bresel
相关产品推荐
相关产品推荐

