91

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

から:

sdfsd   foo sdfsd
sfsd    foo fsdf
sdfsdf  foo  sdfsdf

に:

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

bar(を先頭に追加するだけでなく、実際にfooで囲むこともできbar(foo)ますか?

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

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

4

7 に答える 7

170

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

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

視覚的な選択は、通常の移動コマンドでも実行できます。したがって、Cでブロック全体をコメントするには、最初Ctrlのブレースに移動して---と入力します。v % Shifti // Esc

于 2009-07-23T20:39:43.040 に答える
44

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

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

を探しfoo、一致したパターンを。で囲みbar()ます。これ/gは、1行で複数回実行されます。

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

于 2009-07-23T20:31:49.187 に答える
18

行のセットにプレフィックスを付けるには、次の 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/

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

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

:s:// ::
于 2009-07-23T21:12:41.367 に答える
6

:救助に正常!

:%norm Wibar(

:%norm WEa)

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

W - 次の単語に移動

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

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

または1行で:

:%norm Wibar(ctrlvESCEa)

Windows を実行している場合は、ctrlq代わりにctrlv.

于 2011-03-10T03:47:08.350 に答える
3

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

  • 一番上の行にカーソルを置き、 を押します'a
  • 最後の行の任意の場所にカーソルを置き、 を押します'b
  • コマンドを発行する:'a,'b s/foo/bar(&)/

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

于 2009-07-27T01:05:00.960 に答える
1

別の単純な正規表現は次のとおりです。

%s/^/<text you want to prepend>/
于 2016-01-02T07:25:34.163 に答える
0

Cスタイルのコメントについては、Brianによる正規表現の回答を使用し、行末で一致させて$、挿入します。

于 2009-07-23T20:35:41.643 に答える