ハイライトされた文字列を選択的に変更するにはどうすればよいですか?


11

検索して、変更したい文字列をハイライトしました。ここで、強調表示されたテキストのみを置き換えたいと思います。n検索文字列の次のインスタンスに進むために使用しています。私は何かができると思っていましたがciw、ハイライトされたテキストだけでなく単語全体が変更されました。

私は精通して:%s/old/new/gいますが、すべてのインスタンスを変更したくありません。代わりに、カーソルを各インスタンスに進め、それを変更するかどうかを決定します。

回答:


16

gnモーションを使用して、現在の検索一致を編集します。次の例では、現在の一致を「FooBar」に変更します。

cgnFooBar

この手法の優れた点は、を介して変更を繰り返すことができることです.。次の試合があなたが.繰り返すのと同じように変更されると仮定します。または、いくつかの一致をスキップしてからn、を使用します.

Vimcastsにはこの問題に関する素晴らしいエピソードがあります:gnを使用して検索マッチを操作する

詳細については、以下を参照してください。

:h gn

これは間違いなく、異なる場所で使用する必要のある異なる置換文字列がある場合の方法です。私はによって呼び出されるように見えるビジュアルモードのニュアンスについてはよく分からないgnので、ここで私はちょうど発見したことを同様の方法だ、:c//e<CR>FooBar<Esc>//<CR>
ジェフ

すべての選択/一致を一度に変更する方法はありますか?基本的に、リファクタリングするには?
ジェレミア2018年

@Geremia、はい、の:%s/oldtext/newstuff/gすべての一致をoldtextに変更しnewstuffます。
zundarz

@zundarz正規表現はしたくないが、変数名のみを置き換えたい。.複数回ヒットする代わりに、:%norm .ソース)を使用できます。
Geremia

7

/wordまたはで単語をすでに検索している場合?word

検索語()を空のままにしておく:%s//newword/gcnewword、以前に検索した単語をで置き換えることができますs//..

cフラグは、すべての変更を押して、確認すべきであると言うyはいまたはnいいえのために。

見てください:help :s_flags、確認フラグの詳細については、を。


1
私はあなたが助けを見て言ったけど、あなたにも明示ボタンを押した場合には、あなたのことができます言及するかもしれないlaq(または<Esc>確認サイクルを包むためのさまざまな方法のため)。
ジェフ

2

方法#1

gngNマッピングを利用して、目的を達成できます。 gn最後に使用した検索用語を前方に検索し、一致するものを視覚的に選択します。 gN逆に検索することを除いて、まったく同じことを行います。などの演算子と組み合わせるとc、その演算子が一致に適用されます。たとえば、最後の検索文字列が「foo」のcgn場合、「」と入力すると、「foo」の次のインスタンスを前方検索して削除し、挿入モードにして、置換テキストを入力します。

これらの詳細については:help gn、およびを参照してください:help gN

方法#2

フラグを:substitute付けてコマンドを使用できますc。これにより、各置換を確認するように求められます。たとえば、ファイル全体でfooをbarに置き換えたいが、それぞれの置き換えを確認したいとします。

:%s/foo/bar/gc

これに関する詳細については、これらのヘルプトピックを参照してください:help :s_flags:help cmdline-ranges:help :substitute

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