挿入モードに入らずに複数の文字を置き換える方法


12

次のような行があるファイルがあります。

foofoo.xy.barbar

私が変更したいxyとしますgh。私が実行しようとしました2r> - ghが、それは置き換えとして、明らかにそれは、仕事をしませんでしたxygg、その後、左に私のカーソルの1スポットを移動しました。

挿入モードに入らず、または多くのキーストロークを使用せずにこれを行う方法はあり:s/xy/gh/ますか(例:)?


2
R置換モードに入ります。:help replace-mode詳細については。
alxndr 2015

試しましたvt.rgh。しかし、カーソル位置を除いて、結果はあなたのものと同じでした。
ゴンサロリベイロ

2
挿入モードにしたくないのですか?のような何かcwgh<esc>がうまくいくでしょう。
ドアノブ2015

1
場合@ durron597私はわからないんだけどminimize-keystrokes良いタグである、それは問題が何であるか本当に普通ではありませんについてなど、。(私はあなたの提案された編集を拒否しました)...おそらくあなたはメタで議論すべきですか?
Martin Tournoij、2015

回答:


19

新しいテキストが古いテキストと同じ長さである場合、Vimの置換モードはオプションです。通常モードからR(これは大文字の「r」です)、置換モードになります。これは、他の一部のテキストエディターの「上書き」に似ています。挿入モードのように新しい文字を挿入する代わりに、入力するとカーソルの下の文字が置き換えられ、次のカーソルに進みます。(小文字のように考えてくださいr。ただし、一度に1文字だけではありません。)置換モードのドキュメントをで見つけてください:help replace-mode

あなたの場合:との間にカーソルを置い.x、を押して置換モードに入りますR。入力するgと、「x」が置き換えられて次の文字に移動するため、入力hして「y」を置き換えることができます。これで編集が完了したのでEscape、通常モードに戻ります。

(これは、置換後のテキストが古いテキストと同じ長さの場合に機能しますが、置換が長かったり短かったりする場合は、cそれで十分かもしれません。ムーブメント内のテキスト1を、次に入力したテキストで置き換えます。使用を行うには多くの方法c、たとえば、:の間にカーソルを持つ.xct.ABCEscapeに言うのCハンゲ( 'アップテキストトンの IL次.。 『ABC』とし))


1ムーブメントのテキストを無名/ "レジスターにヤンクし、挿入モードに切り替えます。これにより、何かを入力して置換し、Escape通常モードに戻すことができます。


2
これはこのケースで機能します。これらの2文字を3文字に置き換える場合はどうでしょうか。
ゴンサロリベイロ

1
良い質問; 異なる長さのテキストを処理する方法を含めるように修正されました。
alxndr 2015

ええ、私はその方法を知っています。しかし、その方法で挿入モードに入ると、その場合に挿入モードを使用しない方法があるかどうか知りたいと思いました。それが非常に便利だと思うわけではありません(それでも私は間違っている可能性があります)。
ゴンサロリベイロ

1
数字の接頭辞を付けnn、ターゲット文字の-番目までの文字を置き換えます。これは、ラベルの一部をフォーマットw_x_y_zおよびに置き換える場合に役立ちますa-b-c-df代わりにtを使用して、制限文字も削除します。
pkfm

5

これを行うにはいくつかの方法がありますが、私が考えることができる最も簡単な方法は次のとおりです。

TL; DR

fxcw<REPLACEMENT TEXT>

説明

  • fxxにジャンプします(を参照help *f*
  • cw単語を変更するように指示し(、、および詳細について:h *c*:help *w*、を参照:help cw)、「xy」テキストを削除して挿入モードに入り、そこに好きなものを何でも入れられるようにします。
  • <REPLACEMENT TEXT>は、置き換えたいものです-例では "gh"。

このアプローチの1つの利点は、非常に一般的に使用されるテキスト操作およびナビゲーションコマンドを使用することです。もう1つは、「xy」はどのような長さでもかまいませんが、これでも機能します。

cw作品は、あなたのテキストオブジェクトは、ピリオド(に囲まれているので、.単語の境界として機能します)、。

カーソルがすでに「y」文字(または置換されるテキスト内の任意の文字)にある場合は、を使用できますciw<REPLACEMENT TEXT>。これは、たとえあなたがそれの最初にいなくても、あなたがいる単語を変更するようにvimに伝えます。およびテキストオブジェクトの一般的な詳細については:help text-objects、を参照してくださいciw


これは彼を挿入モードにしませんか?
elyashiv 2015

1
ああ-彼の質問のその部分は理解できませんでした。その場合、はい-Rが最も適切なソリューションです。
Cody Poll

3

置換モード:

Rgh<Esc>

置換が元の長さと同じである場合に最も明白な解決策ですが、次のこともできます。

2sgh<Esc>

または:

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