私はいくつかのヴィムマクロマジックで素早く遊んで、次のアイデアを思いつきました...私は長さについてお詫び申し上げます。
最初に、繰り返したいテキストブロックをレジスタ(私はレジスタz
を選んだ)に置きます。したがって、.tab
行の先頭のカーソルで"z3Y
(select reg zとyank 3行)。
次に、バッファに入れたい一連のVIMコマンドを)"zp:.,%s/home/
と入力しました。 (ちょうどi
を押して、コマンドを入力してください)
これは次のように翻訳されています。
)
- は、二つのトリックを有する
.,%s/home/
、
"zp
レジスタz
内のテキストのコピーを貼り付け、現在の '{}' ブロックの端に行きます。
.,%
は、(すなわち、終わりはありません)コマンドが不完全である置換が.tab
の開始から終了}
の終わりまですべてに適用される保証し、かつ、
vimはコマンドを完了するように促します。
%s///
は、ファイルのすべての行全体で置換を実行する一方、%
範囲1,$
の別名であることを認識することが重要であることに注意してください。 1,%
を範囲として使用すると、%
が 'マッチする括弧にジャンプ'演算子として使用され、現在の行から%
マッチの末尾までの範囲になります。行の先頭に)
にカーソルを配置した後、私はすべてヤンクを意味する"qy$
を入力次に(この例では、ブロック内の閉じ括弧で)
、行末までの文字をレジスタqに格納します。 Y
という行を単にヤンクすると、レジスタにキャリッジリターンが含まれ、マクロが失敗するため、これは重要です。
次に、レジスタqの内容を@q
で実行し、コマンドラインでs/home/
を完了するように求められました。
置換テキストを入力してEnterキーを押すと、貼り付けられたブロック(レジスタzからの)がバッファに挿入され、置換が既に適用されています。
この時点で、最後に@q
を繰り返すことができます。簡単な入力は@@
です。マクロの先頭の)
がそれを行うので、カーソルをブロックの最後まで移動する必要はありません。
これは、元のテキストをヤンクして挿入し、2つの手動置換コマンドを単純な0に実行するプロセスを効果的に減らします。
完了したら、編集バッファからマクロ文字列を安全に削除できます。
これは信じられないほどのvim-ishで、時間を浪費するかもしれませんが、そうすることでさらに多くの時間を節約できます。
Vimマクロはあなたが探しているトリックかもしれません。
あなたはTim Popeの[Abolish](https://github.com/tpope/vim-abolish)を試すことができます: ':Subvert/{about、bar}' – Benoit