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

yb3bgrhw  于 2023-02-08  发布在  其他
关注(0)|答案(5)|浏览(156)

我正在尝试搜索$data['user']并将其替换为$data['sessionUser']
然而,无论我使用什么搜索字符串,我总是得到一个“模式未找到”作为它的结果。
那么,什么是正确的搜索字符串呢?我需要对这些字符进行转义吗?:%s/$data['user']/$data['sessionUser']/g

vojdkbi0

vojdkbi01#

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

我没有测试这个,但我想它应该工作。

nhhxz33t

nhhxz33t2#

下面列出了在Vim中需要转义的所有特殊搜索字符:`^$.*[~)+/

mfpqipee

mfpqipee3#

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

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

\zs\ze可用于分隔受替换影响的匹配部分。您不需要转义$,因为它位于模式的开头,无法匹配此处的EOL。您也不需要转义],因为它没有匹配的开头[。但是,"如果你记不住所有的规则,对这些字符进行转义当然没什么坏处。请参阅:help pattern.txt以获得完整的细节,但不要试图一下子就消化掉所有的内容!
如果你想变得花哨,你可以做:

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

&指的是整个匹配的文本(如果存在,则由\zs\ze分隔),因此在本例中变为“user”。在替换字符串中使用\u时,下一个字符将变为大写。我希望这会有所帮助。

c2e8gylq

c2e8gylq4#

vim中的搜索和替换几乎与sed相同,所以使用与下面相同的转义符:

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

注意,您只需要在搜索部分(第一组//之间的部分)对特殊字符进行转义,在替换部分唯一需要转义的字符是转义字符\本身(这里没有使用)。

h6my8fg2

h6my8fg25#

[字符在正则表达式中有一个含义。它代表字符范围。$字符也有一个含义。它代表行尾锚。所以你必须避开很多东西。我建议你尝试一个小插件,如this或这个one,并使用视觉搜索。

相关问题