たとえば、「word_123」を保持したまま、$asd['word_123']に置き換えたいとします。$this->line('word_123')どうすればそれができますか?
これを使用して:
%s/asd\[\'.*\'\]/this->line('.*')/g
その間に言葉遣いを保つことができなくなります。教えてください。
正規表現を使用すると、次のようなことができます:%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 の投稿をお読みください。
使ってみて
:%s/\$asd\[\'\([^\']\+\)\'\]/$this->line('\1')/g