2016-04-16 5 views
-1

たとえば、スタイルを設定するHTMLタブが数多くあり、それらは異なるクラスを使用し、異なる背景を持ちます。背景画像ファイルには、クラス名に対応する名前があります。私はそれを行うには見つけ文字列パターンを異なる文字列にすばやく置き換えるにはどうすればよいですか?

方法がヤンクです:

.tab.home { 
    background: ...home.jpg... 
} 

そして:s/home/about、その後、貼り付けます。

これを数回繰り返します。私は&が最後の置換を繰り返すのに使用できるが、同じ目標文字列に対してのみ使うことができることを発見した。異なるターゲット文字列で代替文字を繰り返す最も簡単な方法は何ですか?

また、このような処理を効率的に行う方法はおそらくありますか?

+0

あなたはTim Popeの[Abolish](https://github.com/tpope/vim-abolish)を試すことができます: ':Subvert/{about、bar}' – Benoit

答えて

1

私はいくつかのヴィムマクロマジックで素早く遊んで、次のアイデアを思いつきました...私は長さについてお詫び申し上げます。

最初に、繰り返したいテキストブロックをレジスタ(私はレジスタzを選んだ)に置きます。したがって、.tab行の先頭のカーソルで"z3Y(select reg zとyank 3行)。

次に、バッファに入れたい一連のVIMコマンドを)"zp:.,%s/home/と入力しました。 (ちょうどiを押して、コマンドを入力してください)

これは次のように翻訳されています。

    )
  • は、二つのトリックを有する.,%s/home/
  • "zpレジスタz内のテキストのコピーを貼り付け、現在の '{}' ブロックの端に行きます。

    1. .,%は、(すなわち、終わりはありません)コマンドが不完全である置換が.tabの開始から終了}の終わりまですべてに適用される保証し、かつ、
    2. vimはコマンドを完了するように促します。

      • %s///は、ファイルのすべての行全体で置換を実行する一方、%範囲1,$の別名であることを認識することが重要であることに注意してください。 1,%を範囲として使用すると、%が 'マッチする括弧にジャンプ'演算子として使用され、現在の行から%マッチの末尾までの範囲になります。行の先頭に)にカーソルを配置した後、私はすべてヤンクを意味する"qy$を入力次に(この例では、ブロック内の閉じ括弧で)

、行末までの文字をレジスタqに格納します。 Yという行を単にヤンクすると、レジスタにキャリッジリターンが含まれ、マクロが失敗するため、これは重要です。

次に、レジスタqの内容を@qで実行し、コマンドラインでs/home/を完了するように求められました。

置換テキストを入力してEnterキーを押すと、貼り付けられたブロック(レジスタzからの)がバッファに挿入され、置換が既に適用されています。

この時点で、最後に@qを繰り返すことができます。簡単な入力は@@です。マクロの先頭の)がそれを行うので、カーソルをブロックの最後まで移動する必要はありません。

これは、元のテキストをヤンクして挿入し、2つの手動置換コマンドを単純な0​​に実行するプロセスを効果的に減らします。

完了したら、編集バッファからマクロ文字列を安全に削除できます。

これは信じられないほどのvim-ishで、時間を浪費するかもしれませんが、そうすることでさらに多くの時間を節約できます。

Vimマクロはあなたが探しているトリックかもしれません。

+0

これは本当にVim-ishです!説明のおかげで、私が得ることができないのは '%'だけです。それはファイル全体を意味するものではありませんか?なぜここで '}'の終わりを意味するのでしょうか? – Dai

+0

a:コマンドで '%'が '範囲'として使用されている場合、 '1、$'の略です。通常のモードで使用されている場合は、次の括弧、中括弧などを見つけて( 'matchpairs'をチェック)、その反対にジャンプすることを意味します。あなたが '{'の前にいれば、中括弧を見つけて '}'にジャンプします。中括弧の間にいる場合は、中括弧 '}'を見つけ、中括弧にジャンプします(後ろ向きです)。 – Dave

0

マニュアルからは、:s//new-replacementが見つかりました。あまりにも多くの入力と思われる。

良い答えを探しています。

+0

Does not ':s // new-replacement'は最後の検索を繰り返し、新しいテキストで置き換えますか?私は定期的に '/ some-pattern'を使い、':s // newtext'を使って最後の '/'を置き換えます。 – Dave

+0

@Daveはい、質問と回答を反映するように編集しました。それは私が欲しかったことです。ちょうどそれがあまりにもタイピングだと思うので、 '&'のような短いカットを探してください。マニュアルで見つけられませんでした。 – Dai

+1

あなたはおそらく、検索/置換の面で考える必要はありません。 '/ home'が正しい単語にあなたを残してくれると考えて、' cw'は単語を変更します。次回に3行を貼り付け、検索を繰り返すには 'n'を、新しいテキストを入力するには' cw'を押します。 – Dave

関連する問題