たとえば、「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回使用したい場合でも使用できます。@q
80@q
場合によっては、 を使用:norm
することが最適なオプションになることがあります。たとえば、短いコード ブロックがあり、一意の文字または位置を照合している場合です。「$」が特定のコード ブロックの「$asd」にのみ表示されることがわかっている場合は、それを視覚的に選択して、
:norm $T$ct'this->line(<C-v><Esc>f]r)<Enter>
:norm をより効果的に使用する方法については:help :norm
、この reddit の投稿をお読みください。
使ってみて
:%s/\$asd\[\'\([^\']\+\)\'\]/$this->line('\1')/g