2

テキストの操作とコードの記述に vim を毎日使用しています。ただし、置換を実行したり、何らかの正規表現作業を行う必要があるたびに、気が狂ってしまい、崇高なものに切り替える必要があります。私は知りたいのですが、これを回す正しい方法は何ですか:

<img src="whatever.png"/>
<img src="x.png"/>

の中へ

<img src="<%= image_path("whatever.png") %>"/>
<img src="<%= image_path("x.png") %>"/>

崇高なことに、これを search: の正規表現として使用し、これを replacement: の正規表現として使用できsrc="(.*?.png)"ますsrc="<%= asset_path("\1") %>"。vim でこれを行うと、次のよう:%s/\vsrc="(.*?.png)/src="<%= asset_path("\1") %>"/gになります。

E62: Nested ?
E476: Invalid command

私は何をしていないのですか?

4

3 に答える 3

5

@nhahtdhが述べたように、Vimの正規表現の方言は\{-}、貪欲でない量指定子として使用されます。非常に魔法のフラグを使用する場合、それはただの{-}. したがって、コマンドは次のようになります。

:%s/\vsrc="(.{-}.png)/src="<%= asset_path("\1") %>"/g

.ただし、次のようにエスケープしませんでし.pngた:

:%s/\vsrc="(.{-}\.png)/src="<%= asset_path("\1") %>"/g

しかし、私たちはもっとうまくやることができます!\zsandを使用\zeすることで、ビットの再入力を避けることができsrc="ます。交代が行われる試合の開始と終了をマークします\zs\ze

:%s/\vsrc="\zs(.\{-}\.png)"/<%= image_path("\1") %>"/g

\zsただし、配置する場所を慎重に選択すれば、さらに一歩進めることができ、代わりに\zevim を使用できるため、まだ完了していません。Perl の正規表現構文に&似ています。\0今では、非常に魔法のフラグの必要性を無効にするキャプチャ グループは必要ありません。

:%s/src="\zs.\{-}\.png\ze"/<%= image_path("&") %>/g

詳細については、次のドキュメントを参照してください。

:h /\zs
:h /\{-
:h s/\&
于 2013-09-13T14:28:25.707 に答える
2

:%s/"\(.*\)"/"<%= image_path("\1") %>"/g

二重引用符は主なパターンです。キャプチャしたいものはすべてグループに入れられる\( \)ので、後で を介して関連付けることができます\1


非常に魔法を使用する場合は=、をエスケープする必要があります\vsrc\=(.*).png"。したがって、あなたの方法を使用すると、答えは次のようになります。

:%s/\vsrc\="(.*\.png)"/src="<%= image_path("\1") %>"/g

:set hlsearchで遊んでみると簡単にわかります/。:)

于 2013-09-13T12:31:38.090 に答える