8

たとえば、「word_123」を保持したまま、$asd['word_123']に置き換えたいとします。$this->line('word_123')どうすればそれができますか?

これを使用して:

%s/asd\[\'.*\'\]/this->line('.*')/g

その間に言葉遣いを保つことができなくなります。教えてください。

4

2 に答える 2

23

正規表現を使用すると、次のようなことができます:%s/\$asd\['\([^']*\)'\]/$this->line('\1')/g

ステップバイステップ:

%s- ファイル全体を置換

\$asd\['- 「$asd['」に一致。$and[は正規表現で特別な意味を持つため、エスケープする必要があることに注意してください。

\([^']*\)-\( \)を使用して「アトム」と呼ばれるものを選択し、置換で使用できます。は[^']ではない'ものを意味し*、それらの 0 個以上に一致することを意味します。

'\]- 私たちの試合を終了します。

$this->line('\1')- 必要なものに\1置き換え、以前に一致したアトムに置き換えます。

g- 各行で複数の一致に対してこれを行います。

代替 (マクロ)

正規表現の代わりに、マクロを使用することもできます。例えば、

qq/\$asd<Enter>ct'$this->line(<Esc>f]r)q

その後@q、必要な回数だけ。1回使用した@@後でも、80回使用したい場合でも使用できます。@q80@q

オルタナティブ (:ノルム)

場合によっては、 を使用:normすることが最適なオプションになることがあります。たとえば、短いコード ブロックがあり、一意の文字または位置を照合している場合です。「$」が特定のコード ブロックの「$asd」にのみ表示されることがわかっている場合は、それを視覚的に選択して、

:norm $T$ct'this->line(<C-v><Esc>f]r)<Enter>

:norm をより効果的に使用する方法については:help :normこの reddit の投稿をお読みください。

于 2012-07-24T04:30:42.677 に答える
2

使ってみて

:%s/\$asd\[\'\([^\']\+\)\'\]/$this->line('\1')/g
于 2012-07-24T05:53:58.627 に答える