Vim搜索/替换:我需要逃脱什么?

时间:2011-12-16 18:09:54

标签: vim replace

我正在尝试为$data['user']搜索并替换$data['sessionUser']

然而,无论我使用什么搜索字符串,我总是会得到一个“找不到模式”。

那么,正确的搜索字符串是什么?我是否需要逃避这些角色? :%s/$data['user']/$data['sessionUser']/g

5 个答案:

答案 0 :(得分:3)

:%s/\$data\[\'user\'\]/$data['sessionUser']/g

我没有对此进行测试,但我想它应该可行。

答案 1 :(得分:3)

给出的答案没有错,但你可以这样做:

:%s/$data\['\zsuser\ze']/sessionUser/g

\zs\ze可用于分隔受替换影响的匹配部分。 您不需要转义$,因为它位于模式的开头,并且无法与此处的EOL匹配。而且您不需要转义],因为它没有匹配的起始[。但是,如果你不记得所有规则,那么逃避这些角色肯定没有害处。请参阅:help pattern.txt获取完整详细信息,但不要试图一次性消化它!

如果你想获得幻想,你可以这样做:

:%s/$data\['\zsuser\ze']/session\u&/g

&指的是整个匹配的文字(由\zs\ze分隔,如果有的话),因此在这种情况下它会成为“用户”。在替换字符串中使用\u会使下一个字符为大写。我希望这会有所帮助。

答案 2 :(得分:2)

在vim中搜索和替换几乎与sed相同,因此请使用与此相同的转义:

:%s/\$data\['user'\]/$data['session']/g

请注意,您只需要在搜索部分(第一组//之间的部分)中转义特殊字符。您需要在替换部分中转义的唯一字符是转义字符\本身(您在此处未使用)。

答案 3 :(得分:1)

[ char在正则表达式中有意义。它代表character ranges$ char也有意义。它代表end-line anchor。所以你必须逃避很多事情。我建议您尝试使用thisone这样的小插件,并使用直观搜索。

答案 4 :(得分:0)

以下是您需要在Vim中转义的所有特殊搜索字符的列表:^$.*[~