行の途中のテキストをVimの複数行に挿入するにはどうすればよいですか?


91

たとえば、10行あり、それらの行にある単語の前にテキストを追加したいとしますか?行頭にある必要はありません。

から:

sdfsd   foo sdfsd
sfsd    foo fsdf
sdfsdf  foo  sdfsdf

に:

sdfsd   bar(foo sdfsd
sfsd    bar(foo fsdf
sdfsdf  bar(foo  sdfsdf

それが付加するだけでなく、可能性もあるbar(が、実際に囲んfoobar(foo)

また、//複数の行にコメントを追加する簡単な方法も必要です(Cスタイルのコメント)。

私はVim / GVim 7.2を使用しています。


1
Cスタイルのコメントは/ * * / BCPLスタイルのコメントは//
William Pursell 09

回答:


169

最初のfooに移動し、Ctrl- vを押してビジュアルブロックモードに入り、ですべての行fooがマークされるまで押します。次に、Shift- iを押して(ブロックの)先頭に挿入します。終了してを押すEscと、挿入された文字がマークされたブロックの左側の各行に追加されます。

最後に挿入するには、もう一度Ctrl-を押しv、上下に移動して影響を受けるすべての行をマークしてから、Endまたは$を押して選択を行の最後まで拡張します。これでShift- aを押して、以前のShift- と同じように、すべての行の最後に追加できますi

視覚的な選択は、通常の移動コマンドでも実行できます。ですから、開口部のブレースと型に移動することができますCでブロック全体をコメントするにはCtrl- v % Shift-i // Esc


5
追加:Ctrl-VがWindows上のVimでビジュアルブロックモードを開始しない場合は、代わりにCtrl-Qを使用する必要があります。
ポール

3
then回答のバリエーションは、Shift + Vでビジュアルブロックをマークすることです。exモードでブロックを次のように指定します。: '<、'> s / ^ / prexix_text /: '<、'> s / $ / suffix_text /「 '< 、 '> "は、": "を押すとvimによって自動的に出力されます。
dimba 2009

1
コメントを解除するには、ビジュアルブロックを使用します(Ctrl + Vでマークします)。コメント記号「//」が付いた列の1つに「d」を押すと、コメントが削除されます。C ++コメント(/ ** /)も忘れないでください:)
dimba 2009

9
Linuxでは、接頭辞がすべての行に適用される前に挿入モードを脱出する必要があり、ビジュアルモードから挿入モードに入るのに必要な資本であることに注意してください。
ジョシュアエンフィールド

6
これはパテでは機能しません。押してiも何も起こりません。押すshift+iと選択が消えますが、テキストを挿入できます(カーソルが置かれている現在の場所にのみ)。
ユルゲンポール

44

最初の質問に答えるために、以下

:%s/foo/bar(&)/g

はを探しfoo、一致したパターンをで囲みbar()ます。/g1行で、この複数回行います。

あなたはちょうど一致しているのでfoo、あなたは簡単なことができます:s/foo/bar(foo)/g。ただし、単純な単語(たとえばf[a-z][a-z])ではなく正規表現に一致する場合は、上記の方法で問題ありません。上記の「&」は、一致したものを表します。


マクロに関しては長い答えがありました。これはもっと簡単です:-)
ブライアン・ラムゼイ

複数行の場合はどうしますか?実際のケースは、この置換を必要とする同様の行で構成されるコードブロックがある場合です。

すべての行で機能するように見えます...:%sと/ gに注意してください。
ojrac 2009

興味深いのは何であるということである。確認しない%がS / fooの/バー(&)/ GC - 「C」は何のeffect..Ugh持っていない

1
間のテキスト:sそれが動作ラインを決定します。現在の行だけを意味するものはありません。 1,301行目から30行目までを意味します。 '<,'>現在のビジュアルセレクションのラインを意味します。
ホタルブクロ

17

一連の行にプレフィックスを付けるには、次の2つの方法のいずれかを使用します。

1つのアプローチはブロック選択です(sthで言及)。通常、長方形の領域を選択しctrl-Vて、カーソルを移動できます。長方形をハイライトした後、を押すshift-Iと、長方形の左側に文字が挿入されるか、長方形の右側に文字shift-Aが追加されます。したがって、この手法を使用して、プレフィックスを付ける行の左端の列を含む長方形を作成し、を押しshift-I、プレフィックスを入力してから、エスケープを押します。

もう1つのアプローチは、置換を使用することです(Brian Agnewが言及)。ブライアンの置換はファイル全体に影響します(コマンドの%は「すべての行」を意味します)。数行に影響を与えるための最も簡単な方法はshift-V、最初/最後の行でヒット(ビジュアルラインモードを有効にする)してから、最後/最初の行に移動することです。次に、次のように入力します。

:s/^/YOUR PREFIX/

^は正規表現です(この場合、行の先頭)。これをビジュアルラインモードで入力すると、sの前に自動的に「<、」>が挿入されます。これは、置換の範囲が視覚的な選択になることを意味します。

追加のヒント:プレフィックスにスラッシュが含まれている場合は、バックスラッシュでエスケープするか、コマンドの区切り文字として別​​の句読文字を使用できます。たとえば、C ++行コメントを追加するには、通常次のように記述します。

:s:^:// :

サフィックスを追加する場合、すべての行が正確に同じ長さでない限り、置換アプローチは一般に簡単です。パターンに^の代わりに$を使用するだけで、文字列は先頭に付加される代わりに追加されます

接頭辞と接尾辞を同時に追加する場合は、次のようにします。

:s/.*/PREFIX & SUFFIX/

。*は行全体と一致します。置換の&は、一致したテキスト(行全体)を戻しますが、これでプレフィックスとサフィックスが追加されます。

ところで:コードをコメントアウトするときは、おそらく後でコメントを外したくなるでしょう。ビジュアルブロック(ctrl-V)を使用してスラッシュを選択し、dを押してそれらを削除するか、置換(おそらくで作成されたビジュアルラインの選択shift-V)を使用して、次のように先頭のスラッシュを削除できます。

:s:// ::

6

:通常の救助!

:%norm Wibar(

:%norm WEa)

:norm(al)は、入力したかのようにコマンドを再生します。

W-次の単語に移動

i-挿入モードを開始します

bar(-シーケンス 'bar('を入力します

または1行で:

:%norm Wibar(ctrlvESCEa)

Windowsを実行している場合は、のctrlq代わりに入力しctrlvます。


3

さらに別の可能性(おそらく、テストケースではそれほど役に立ちませんが、他の状況では便利です)は、変更したい領域をマークで区切ることです。

  • カーソルを一番上の行のどこかに置いて、 'a
  • カーソルを最後の行のどこかに置いて、 'b
  • コマンドを発行します :'a,'b s/foo/bar(&)/

私は通常、すべてが画面に表示されている場合はビジュアルブロックモードを好み、開始と停止が多くの画面で区切られている場合は通常マークを好みます。


新しいマーカーを設定するm代わりにすべき'です。 '既存のマーカーの行にジャンプするためのものです。`そのマーカーの行と列にジャンプします。
tiktak 2018


0

Cスタイルのコメントの場合は、ブライアンの正規表現の回答を使用し、行末で一致させ$て挿入します。

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