我正在尝试搜索$data['user']并将其替换为$data['sessionUser']。然而,无论我使用什么搜索字符串,我总是得到一个“模式未找到”作为它的结果。那么,什么是正确的搜索字符串呢?我需要对这些字符进行转义吗?:%s/$data['user']/$data['sessionUser']/g
$data['user']
$data['sessionUser']
:%s/$data['user']/$data['sessionUser']/g
vojdkbi01#
:%s/\$data\[\'user\'\]/$data['sessionUser']/g
我没有测试这个,但我想它应该工作。
nhhxz33t2#
下面列出了在Vim中需要转义的所有特殊搜索字符:`^$.*[~)+/
mfpqipee3#
给出的答案没有错,但你可以这样做:
:%s/$data\['\zsuser\ze']/sessionUser/g
\zs和\ze可用于分隔受替换影响的匹配部分。您不需要转义$,因为它位于模式的开头,无法匹配此处的EOL。您也不需要转义],因为它没有匹配的开头[。但是,"如果你记不住所有的规则,对这些字符进行转义当然没什么坏处。请参阅:help pattern.txt以获得完整的细节,但不要试图一下子就消化掉所有的内容!如果你想变得花哨,你可以做:
\zs
\ze
$
]
[
:%s/$data\['\zsuser\ze']/session\u&/g
&指的是整个匹配的文本(如果存在,则由\zs和\ze分隔),因此在本例中变为“user”。在替换字符串中使用\u时,下一个字符将变为大写。我希望这会有所帮助。
&
\u
c2e8gylq4#
vim中的搜索和替换几乎与sed相同,所以使用与下面相同的转义符:
sed
:%s/\$data\['user'\]/$data['session']/g
注意,您只需要在搜索部分(第一组//之间的部分)对特殊字符进行转义,在替换部分唯一需要转义的字符是转义字符\本身(这里没有使用)。
//
\
h6my8fg25#
[字符在正则表达式中有一个含义。它代表字符范围。$字符也有一个含义。它代表行尾锚。所以你必须避开很多东西。我建议你尝试一个小插件,如this或这个one,并使用视觉搜索。
5条答案
按热度按时间vojdkbi01#
我没有测试这个,但我想它应该工作。
nhhxz33t2#
下面列出了在Vim中需要转义的所有特殊搜索字符:`^$.*[~)+/
mfpqipee3#
给出的答案没有错,但你可以这样做:
\zs
和\ze
可用于分隔受替换影响的匹配部分。您不需要转义$
,因为它位于模式的开头,无法匹配此处的EOL。您也不需要转义]
,因为它没有匹配的开头[
。但是,"如果你记不住所有的规则,对这些字符进行转义当然没什么坏处。请参阅:help pattern.txt以获得完整的细节,但不要试图一下子就消化掉所有的内容!如果你想变得花哨,你可以做:
&
指的是整个匹配的文本(如果存在,则由\zs
和\ze
分隔),因此在本例中变为“user”。在替换字符串中使用\u
时,下一个字符将变为大写。我希望这会有所帮助。c2e8gylq4#
vim中的搜索和替换几乎与
sed
相同,所以使用与下面相同的转义符:注意,您只需要在搜索部分(第一组
//
之间的部分)对特殊字符进行转义,在替换部分唯一需要转义的字符是转义字符\
本身(这里没有使用)。h6my8fg25#
[
字符在正则表达式中有一个含义。它代表字符范围。$
字符也有一个含义。它代表行尾锚。所以你必须避开很多东西。我建议你尝试一个小插件,如this或这个one,并使用视觉搜索。