内側のテキストをヤンクしたテキストに置き換える方法


17

私がよく遭遇する編集パターンは次のとおりです。引用符または括弧内のテキストをヤンクし、引用符/括弧の別のペア内のテキストを置換したい。

たとえば、クラス名をコピーしてfoo bar別の場所に貼り付ける場合:

<span class="foo bar">

<div class="this-should-be-replaced-with-foo-and-bar">

私が知っているのはこれです:スパンのクラス内を移動する場合yi"、引用内のテキストをヤンクするために使用します。

今、私はこれをレジスタに持っているので、divのクラスの内容をそれで置き換えることができるはずです。しかし、私はこれを行う便利な方法を見つけることができません。

これを使用するciwと、変更する内容でレジスタが上書きされるため、ヤンクしたテキストが失われます。

私が思いつくことができる最高のことは、divのクラスの最初の引用に移動しp、を押してから、で次の引用に削除することdt"です。

通常、私は自分の立場を台無しにし、引用符の中のどこかにそれを貼り付けて2つの文字列をマージし、それは物事を台無しにしている。

これを簡単にするために、「内側のテキストをヤンクしたコンテンツに置き換えてください」の組み合わせを行う方法があることを望んでいます。

回答:


19

vi"p内部にあるときに使用できます""。これはヤンクレジスタ内のテキストを置き換えることができるため、元のヤンクされたテキストを複数回使用する場合に重要です。

編集:Octaviourのコメントを追加して再利用可能にすることに関するコメント:

それを行うには、名前付きレジスタにヤンクし、2つのコマンドを作成します:"ayi"およびvi""apregisterを使用する場合a


2
このソリューションについて詳しく説明します。まず、コピーするテキストをヤンクします。次に、貼り付けたい場所に移動し、vi "を使用して視覚的に選択します。貼り付けコマンドは、名前のないレジスタの内容を同時にカーソルに置き、選択したテキストを削除します。名前のないレジスタの内容は置き換えられるため、同じテキストを2回貼り付けることはできません。それを行うには、名前付きレジスタにヤンクします。これにより、レジスタaを使用する場合、「ayi」およびvi「」apという2つのコマンドが作成されます。
オクタビオール

詳しくお問い合わせいただきありがとうございます。それはvimの動きで物事を綴るのに役立ち、後で覚えやすくします。思ったほど簡単ではありませんが、vimの意味では理にかなっています。ドットコマンドを使用して、2回目の繰り返しと迅速な置換を行うことは機能しません。それが近道になることを望みました。:)
jurgenb

11

番号付きレジスタを使用できます。最初に「foo-bar」をヤンクしてyi""0レジスタを埋めます:h "0。を参照してください。次にci"<c-r>0、レジスタ0の内容に置き換えます。

:h i_CTRL-R最後の部分の説明を参照してください。


2
名前のないレジスタ(yi")に単にヤンクし、0変更するテキストを削除した後(ci"<c-r>0)、保存されているレジスタから貼り付けてみませんか?vimgolfに関しては、2回のキーストロークで勝ち、レジスタを台無しにしません。
statox

「a」を
押す

@ n3wjackそれはおそらくあなたがCTRL+raに押されなかったからでしょう、それが<c-r>意味することです。
statox

1
@KarlYngveLervågは実際ciwには削除されたテキストを名前のないレジスタに入れますが、レジスタはシフトされます。<c-r>0そのため、の代わりに使用する必要があり<c-r>"ます。をご覧ください:h quote_number
statox

1
より具体的には、ここでのポイントは名前のないレジスタではなく、番号付きレジスタに関するものだと思います。"0レジスタはヤンクコマンドによって満たされると、例えばによって妨害されることはありませんc
カールイングヴェレーヴァーグ16年

8

これが頻繁に必要になるので、単純化して最高速度を実現するプラグインReplaceWithRegisterを作成しました

このプラグインは、gr{motion} / textオブジェクトで覆われたテキスト、行全体、または現在の選択をレジスタの内容で置き換えるツーインワンコマンドを提供します。古いテキストはブラックホールレジスタに削除されます。つまり、削除されます。多くのコーナーケースを透過的に処理し、標準.コマンドを使用してすばやく繰り返すことができます。気に入らない場合は、そのページに選択肢へのリンクがあります。


すごい!これはバニラvimである必要があります。
フィリップメールス

8

別のソリューションがあります。Vimgolfの観点では最適ではありませんが、ブラックホールレジスタを使用します。

あなたがにしているいったんfoo bar文字列あなたはそれが正常に使用してヤンクすることができますyi"

次に、括弧内で変更します。 "_di"P

どちらですか:

"_       We will use the black hole register
di"      Delete the inner brackets and put the deleted text in the black hole register
P        Put the previously yanked text

ブラックホールレジスタの利点は、他のレジスタを台無しにしないことです。詳細:h quote_を参照してください。

(この回答は、ブラックアウトレジスタについて説明するためにのみここにあることに注意してください。個人的には、@ grodzikが示唆する視覚的な選択を使用します。)


Pそのためには大文字が必要だと思います。あなたの場合はdi"カーソルが最後の引用符に残されると、p後に貼り付けられます、どこのようにP現在位置の前に貼り付けられます。
jecxjo

@jecxjoそうです、回答を編集しました、ありがとう!
statox
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.