gpt4 book ai didi

search - 在 vim 搜索中找到模式,但在 vim 搜索和替换中找不到?

转载 作者:行者123 更新时间:2023-12-04 11:29:21 24 4
gpt4 key购买 nike

我正在尝试使用 vim 中的反向引用和正则表达式进行搜索和替换操作。有趣的是,它只会在我进行纯搜索时识别该模式,但是如果我进行搜索并替换它,它会给我一个 E486: pattern not found 错误。

我有一堆形式的函数调用:

function( Nullable< double >(1.1), map[FOO] );

其中 FOO 是每行上一些不同的变量名称。我想把它变成
function( othermap[ FOO ], map[FOO] );

如果我尝试
:%s/Null.*\(map[\)\(.*\)\]/othermap[ \2 \], \1\2\]/g

它给了我“找不到模式错误”。甚至
:%s/Null.*\(map[\)\(.*\)\]//g 

将不起作用,因为它只是无法识别模式。但是,如果我使用完全相同的搜索正则表达式尝试以下命令:
/Null.*\(map[\)\(.*\)\]

它正确突出显示。接下来,我可以做 %s//othermap[\2 ],\1\2] 来做我的替换。所以我毕竟能够进行替换,但是我终其一生都无法理解为什么在一种情况下会识别该模式而不是在另一种情况下。

最佳答案

我可以使用 copy'n'paste 从你的问题复制结果到我的 vim session 。不过,我得到的详细信息是:

E486: Pattern not found: Null.*\(map[\)\(.*\)\]/othermap[ \2 \], \1\2\]/g

注意它丢失了 s/在开始时。

然而,仔细看这个,问题是一个未转义的 [ :
s/Null.*\(map[\)\(.*\)\]/othermap[ \2 \], \1\2\]/g
^
|-- here; you need \[ to match the literal

我不使用 %符号;我会自动写:
:g/Null.*\(map\[\(.*\)\]\)/s//othermap[\2], \1/g

这与捕获略有不同。也不需要在 \] 中使用反斜杠在替换字符串中。

但是,此命令也适用于我:
:%s/Null.*\(map\[\(.*\)\]\)/othermap[\2], \1/g

关于search - 在 vim 搜索中找到模式,但在 vim 搜索和替换中找不到?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7291425/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com