替代搜索中的斜杠并替换长字符串


10

vim搜索和替换字符串是否有其他选择,而不必转义字符串中的每个特殊字符。

例如,如果我想匹配以下字符串并替换为某些内容

[ERROR] Login unsucessful

那我要做

:%s/\[ERROR\]\ Login\ unsucessful/something/g

对于包含很多特殊字符的复杂字符串,它变得更加难看和痛苦

我想做类似的事情

:%s/"[ERROR] Login unsucessful"/something/g

这样可以避免所有逃跑。有没有这样的功能?

Answers:


16

您可以使用very-nomagic开关。有关:h \V详细信息,请参见。这会给你%s/\V[ERROR] Login unsuccessful/something/g。还有一个nomagicswitch \M,它是的较轻版本,\V似乎并未广泛使用。

另外请注意,即使不使用,也不必像在示例中那样转义空格\V


谢谢。正是我想要的。没有在我的Google搜索中找到它,不知道为什么。
MohitC

2
@MohitC我映射//\v启用“非常神奇”对于大多数的搜索,所以我已经映射///开始未修改搜索(通过搜索历史忽略修饰符会很有用),并/v//\V快速关闭所有魔法进行搜索。
凯尔·斯特兰德

@MohitC实际上,我的设置要复杂得多,因为我还使用了一个插件在所有情况下都尽可能一致地使用“ very magic”。在这里查看我的答案
凯尔·斯特兰德

7

您不需要转义空间。所以这:

:%s/\[ERROR\]\ Login\ unsucessful/something/g

实际上应该是:

:%s/\[ERROR\] Login unsucessful/something/g

而且,当然,您可以启用非常不可思议的 “模式”以使那些特殊字符不太特殊:

:%s/\V[ERROR] Login unsucessful/something/g

请参阅:help /magic


2

除了不可思议的标记以外,其他答案中也提到过。

通常情况下,您不需要在搜索字符串中保持精确

例如,为了匹配

[ERROR] Login unsucessful

您可以使用表达式

.ERROR. Login unsucessful

显然,您必须知道您的数据将不包含其他字符串,这些字符串与预期目标不同,但与表达式匹配。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.