2011-12-16 5 views
8

$data['sessionUser']$data['user']を検索して置き換えようとしています。Vim検索/置換:エスケープするには何が必要ですか?

しかし、どの検索文字列を使用しても、結果として常にパターンが見つかりません。

正しい検索文字列は何ですか?これらの文字をエスケープする必要はありますか? :%s/$data['user']/$data['sessionUser']/g

答えて

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

私はこれをテストしていないが、私はそれが動作する必要がありますね。

+2

置換部分にエスケープは必要ありません。 –

+0

ええ、それは働いた。ありがとう! – Falassion

1

[ charは正規表現で意味を持ちます。それはcharacter rangesの略です。 $文字も意味があります。それはend-line anchorの略です。だからあなたは多くのことを逃れなければなりません。 thisまたはoneのような少しのプラグインを試してみて、視覚的な検索を使用することをお勧めします。

+0

私は本当に検索のためのより簡単なオプションを探していました。私は組み込み検索と置換についてもっと知るようになるだろうが、あなたが私に見せたものの1つを試してみる可能性が高い。ありがとう。 – Falassion

2

検索とsedとほぼ同じですので、あなたと同じようにそれと同じエスケープを使うのvimに置き換える:あなただけは本当に検索部に特殊文字をエスケープする必要が

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

注意(一部//の最初のセットとの間)。置換部分でエスケープする必要のある唯一の文字は、エスケープ文字\(ここでは使用していません)です。

+0

2番目の '//'に関する面白い情報。ありがとう。 – Falassion

2

あり何も悪いことは、与えられた答えとしていませんが、あなたがこれを行うことができます:交換の影響を受けている試合の一部を区切るために使用することができます

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

\zs\ze$はパターンの先頭にあり、ここではEOLと一致できないため、エスケープする必要はありません。 [と一致するものがないので、]から脱出する必要はありません。しかし、あなたがすべてのルールを覚えていない場合、これらの文字をエスケープすることに確かに害はありません。詳細は、help pattern.txtを参照してください。しかし、すべてを一気に消化しようとしないでください!

あなたは空想を取得したい場合は、あなたが行うことができます:

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

&は(存在する場合\zs\zeで区切られた)マッチしたテキスト全体を指し、それは、この場合の「利用者」になります。 \uを置換文字列で使用すると、次の文字は大文字になります。私はこれが役立つことを願っています

関連する問題