我有一个带有一堆用户默认值的文件。我想更改一些文本,但是我在努力寻找匹配器和替换器。使用以下示例:
###############################################################################
# Trackpad, mouse, keyboard, Bluetooth accessories, and input #
###############################################################################
# Trackpad: enable tap to click for this user and for the login screen
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -bool true
我想替换# Trackpad: ...
为running "Trackpad: ..."
解决问题的方法是,我使用正则表达式测试器提出了一些建议:
/\n\n#\s(.*)/g
如果我尝试在Vim中使用它,则对我不起作用:
:/\n\n#\s(.*)/running "\1"/g
我想我的问题可以归结为两个具体问题:
- 如何避免搜索
\n
字符,而是确保#
没有出现在搜索组的末尾? - 如何有效使用捕获组?
以下是一些很好的答案。很难在这三者之间进行选择,但是我认为所选答案对于我的原始规格而言是最准确的。我建议您尝试使用实际文件中的所有三个答案,以查看您对它们的感觉。
:%s/\v\n\n#\s+(.*)/^M^Mrunning "\1"/
(添加了“魔术”标志)。很难为我的原始问题选择正确的答案,但是我觉得这个答案最接近我的原始预期答案。它也是唯一可在整个文件中使用而无需选择范围的文件。