![Notepad++ 宏用于更改字符串的某个部分](https://linux22.com/image/1436815/Notepad%2B%2B%20%E5%AE%8F%E7%94%A8%E4%BA%8E%E6%9B%B4%E6%94%B9%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E6%9F%90%E4%B8%AA%E9%83%A8%E5%88%86.png)
我想定义一个 Notepad++ 宏,它接受任何包含“foo”的字符串,并创建其新版本,仅将 foo 更改为“bar1”、“bar2”等。
所以如果我的文件包含
abc_foo_def
当我运行宏时,我想得到
abc_foo_def
abc_bar1_def
abc_bar2_def
abc_bar3_def
试验 1
我尝试了一个宏,使用Ctrl + D
(重复行) 转到底行并开始“foo”,按 3 次删除键,然后输入“bar1”,重复直到 bar3。请注意,即使这个宏有效,它也不适用于输入行中的多个“foo”。然而,它并没有按预期工作。
试验 2
尝试了另一个宏,复制、选择第二行、搜索并用“bar”替换“foo”,并选中In Selection
复选框。但我认为这不适用于宏。
所以我正在寻找一种可靠的方法。谢谢您的帮助!
1. PS1
我也可以接受没有 Notepad++ 的解决方案。(Excel、Word 等等)
PS2 游戏
我的输入字符串可以包含多个“foo”。每个字符串都应替换为“barx”
答案1
我不确定为什么你的第二次尝试失败了。也许你在录制宏时使用了鼠标?我确信如果你在录制宏时只使用键盘,你会得到更好的结果。
我刚刚在 Notepad++ 6.6.9 中录制了以下宏。它适用于源代码行中可变数量的“foo”字符串。
- 将光标设置在源行的开头
记录:
- Ctrl+D
- Ctrl+D
- Ctrl+D
- Home
- ↓
- Shift+End
- Ctrl+ H(查找和替换)
- 找到“foo”并替换为“bar1”;选择“在选择中”;点击Replace All
- 关闭对话框
- Home
- ↓
- Shift+End
- Ctrl+ H(查找和替换)
- 找到“foo”并替换为“bar2”;选择“在选择中”;点击Replace All
- 关闭对话框
- Home
- ↓
- Shift+End
- Ctrl+ H(查找和替换)
- 找到“foo”并替换为“bar3”;选择“在选择中”;点击Replace All
- 关闭对话框
结束录制
以下是 XML 来源%AppData%\Notepad++\shortcuts.xml
:
<Macro name="SuperUser_Q_Macro" Ctrl="no" Alt="no" Shift="no" Key="0">
<Action type="0" message="2469" wParam="0" lParam="0" sParam="" />
<Action type="0" message="2469" wParam="0" lParam="0" sParam="" />
<Action type="0" message="2469" wParam="0" lParam="0" sParam="" />
<Action type="0" message="2453" wParam="0" lParam="0" sParam="" />
<Action type="0" message="2300" wParam="0" lParam="0" sParam="" />
<Action type="0" message="2315" wParam="0" lParam="0" sParam="" />
<Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
<Action type="3" message="1601" wParam="0" lParam="0" sParam="foo" />
<Action type="3" message="1625" wParam="0" lParam="0" sParam="" />
<Action type="3" message="1602" wParam="0" lParam="0" sParam="bar1" />
<Action type="3" message="1702" wParam="0" lParam="898" sParam="" />
<Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
<Action type="0" message="2453" wParam="0" lParam="0" sParam="" />
<Action type="0" message="2300" wParam="0" lParam="0" sParam="" />
<Action type="0" message="2315" wParam="0" lParam="0" sParam="" />
<Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
<Action type="3" message="1601" wParam="0" lParam="0" sParam="foo" />
<Action type="3" message="1625" wParam="0" lParam="0" sParam="" />
<Action type="3" message="1602" wParam="0" lParam="0" sParam="bar2" />
<Action type="3" message="1702" wParam="0" lParam="898" sParam="" />
<Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
<Action type="0" message="2453" wParam="0" lParam="0" sParam="" />
<Action type="0" message="2300" wParam="0" lParam="0" sParam="" />
<Action type="0" message="2315" wParam="0" lParam="0" sParam="" />
<Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
<Action type="3" message="1601" wParam="0" lParam="0" sParam="foo" />
<Action type="3" message="1625" wParam="0" lParam="0" sParam="" />
<Action type="3" message="1602" wParam="0" lParam="0" sParam="bar3" />
<Action type="3" message="1702" wParam="0" lParam="898" sParam="" />
<Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
</Macro>