Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 在vim搜索中找到模式,但在vim搜索和替换中未找到模式?_Search_Vim_Replace - Fatal编程技术网

Search 在vim搜索中找到模式,但在vim搜索和替换中未找到模式?

Search 在vim搜索中找到模式,但在vim搜索和替换中未找到模式?,search,vim,replace,Search,Vim,Replace,我正试图在vim中使用反向引用和正则表达式来执行搜索和替换操作。有趣的是,它只会在我进行纯搜索时识别模式,但如果我进行搜索并替换,它会给我一个E486:pattern not found错误 我有一系列函数调用,其形式如下: function( Nullable< double >(1.1), map[FOO] ); 如果我尝试 :%s/Null.*\(map[\)\(.*\)\]/othermap[ \2 \], \1\2\]/g 它给了我“找不到的模式错误”甚至 不起作用,因

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

我有一系列函数调用,其形式如下:

function( Nullable< double >(1.1), map[FOO] );
如果我尝试

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

不起作用,因为它无法识别模式。但如果我使用完全相同的搜索正则表达式尝试以下命令:

/Null.*\(map[\)\(.*\)\]

它正确地突出显示。接下来,我可以执行%s//othermap[\2],\1\2]来进行替换。所以我最终还是可以做我的替换,但我一辈子都不明白为什么模式会在一种情况下被识别,而在另一种情况下不会被识别。

我可以使用复制粘贴从您的问题复制到我的
vim
会话。不过,我得到的详细信息是:

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

哦,我不知道你也必须逃离第一个方括号。方括号的行为对我来说很奇怪,因为它似乎在很多情况下都能起作用,即使我没有逃避它。谢谢可能重复的
:g/Null.*\(map\[\(.*\)\]\)/s//othermap[\2], \1/g
:%s/Null.*\(map\[\(.*\)\]\)/othermap[\2], \1/g