Notepad++ 创建针对当前选中文本执行替换操作的宏
Notepad++ 创建针对当前选中文本执行替换操作的宏
嘿,我完全懂你遇到的麻烦——录宏的时候它会把你当时选中的文本硬编码进去,每次运行都只会替换那固定的内容,根本没法灵活处理每次新选中的片段对吧?别发愁,咱们可以手动修改Notepad++的宏配置文件来解决这个问题!
首先你得知道,你之前录的宏里,<Action type="3" message="1601" ... sParam="some text"这一行是把搜索内容固定成了“some text”,所以不管你后来选什么,它都只会搜这个固定文本。要实现“每次运行宏时替换当前选中的内容”,咱们需要用Notepad++宏的特殊变量$(SELECTION)来指代当前选中的文本。
具体操作步骤如下:
- 先关闭Notepad++:因为软件运行时会自动保存宏配置,所以必须先关掉它,不然你的修改会被覆盖。
- 找到
shortcuts.xml文件:它在AppData\Notepad++\目录下(你可以直接在文件管理器地址栏输入这个路径跳转)。 - 找到你录制的
SaR_macro宏代码块,把它替换成下面的内容:
<Macro name="SaR_macro" Ctrl="yes" Alt="no" Shift="yes" Key="89"> <!-- 初始化搜索环境 --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <!-- 开启正则表达式模式(如果不需要正则,可将lParam="1"改为0) --> <Action type="3" message="1625" wParam="0" lParam="1" sParam="" /> <!-- 将当前选中的文本设为搜索目标 --> <Action type="3" message="1601" wParam="0" lParam="0" sParam="$(SELECTION)" /> <!-- 这里设置你要替换成的内容,比如换成「 [已处理] 」,改成你需要的文本即可 --> <Action type="3" message="1602" wParam="0" lParam="0" sParam="[已处理]" /> <!-- 执行替换操作(仅替换当前选中的内容) --> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> </Macro>
- 保存
shortcuts.xml,重新打开Notepad++就可以用了!
举个例子,就像你说的,选中“ - qwerty”按下宏快捷键,这段文本就会变成你设定好的内容;再选中“ - asdf”按快捷键,同样会替换成同一个内容,完美符合你的需求。
几个小提醒:
- 如果你的替换内容里有正则特殊字符(比如
.、*、+这类),要么给这些字符加转义符\,要么把开启正则的那行<Action type="3" message="1625" wParam="0" lParam="1" sParam="" />里的lParam="1"改成lParam="0",关闭正则模式。 - 确保修改配置文件时Notepad++是关闭的,不然修改不会生效。
备注:内容来源于stack exchange,提问作者Krz
相关产品推荐
相关产品推荐

