2011-09-29 6 views
22

私はそれが好きにするために、各ラインの前にスペースを追加することができ、その数ならば、それは素晴らしいことだどのようにviのカーソル位置から始まる空白のブロックを挿入するには?

AAAA 
BBB 
CC 
D 

、私は現在、最初Aに滞在カーソルで以下のテキストの一部を持っていると仮定スペースの列のうちの1つをオンザフライで指定することができます(例:ここでは2つ)。

AAAA 
    BBB 
    CC 
    D 

ビジュアルモードですばやく行う方法はありますが、アイデアはありますか?

現在、ビジュアルモードのテキストの最初の列を2回コピーし、2つの列全体を空白に置き換えます。これには、> 5回のキーストロークが関係します。

制約:私は明確に質問を述べなかったし、いくつかの混乱を作成する可能性があることを

申し訳ありません。

ターゲットは大きなファイルの一部にすぎないので、最初のAから始まる行と列の数を指定できると便利です。

編集:

感謝@DeepYellowと@Johnsyweb、明らかに>}>ap私は気づいていなかったすべての偉大なヒントがある、と私はのための特定の要件に明確にする前に、それらの両方が有効な回答をすることができ、両方の私の質問に対する答えですが、いずれにせよ、@ luser droogの答えは唯一の実行可能な答えとして際立っています。みんなありがとう!

答えて

42

私はあなたにもライン:10,15s/^/ /

または相対範囲:.,+5s/^/ /

または場所:/A/,/D/>のための正規表現を使用の範囲を指定することができ:%s/^/ /

を使用すると思います。

SOに貼り付けるコードをコピーするために、私が通常使用sed 's/^/ /' filename


端末からsedのショートカット

I just learnedこのため、新たなトリック。あなたは、その後、あなたに与える:を打つ(定期的な運動とコマンド)地域を選択し、ビジュアルモードvを入力し、この:あなたは上記のコマンドのちょうどコマンド一部を入力するため

:'<,'> 

準備ができて、 '<'>のマークが自動的にビジュアル選択の境界に設定されます。現在の段落を選択し、インデントし

vip> 

または

続い
vip:> 

はを入力してください。

編集:コメントで要求されたよう

、あなたも上の任意ののメタ文字.を正規表現数量詞\{n}を使用して行の途中にスペースを追加することができます。

:%s/^.\{14}/&/

これは、各行の左側から14文字分のスペースを追加します。もちろん%は、)コマンドの範囲を指定するための上記オプションのいずれかに置き換えることができます。最初のAに、私は、ブロックビジュアルモードctrl-vに行く変更したい行を選択し、押しI(資本iと挿入モード)、と私は最初の行のために必要な変更を適用したい

+0

素敵な、ありがとう! – nye17

+0

vimは素晴らしいです\ o/ –

+0

そして、すべてのファイル行に14文字の後に空白を追加するには? – HenioJR

12

私は>}を使用すると思います。

...

  • >は:右シフトと
  • }は:段落

このことができます希望の終わりまでを意味します。

+0

あなたはビジュアルモードで正しいのですか?スペースの数は、私は凹みためのvimrcで指定されたものと同じである場合私はこれは[ノーマルモード](http://vimdoc.sourceforge.net/htmldoc/intro.html#である – nye17

+1

....これを使用します正常)。あなたはシフト幅を指定しなかった(あるいは、私が答えた時には少なくともあなたはいなかった)。 – Johnsyweb

+0

@ nye17: 'shiftwidth = 4 softtabstop = 4 expandtab'を設定していませんか? –

4

ビジュアルモードで線を選択し、>と入力します。これは例えば、あなたがスペースを挿入するまで、あなたのタブを設定していることを前提としています

setl expandtab 
setl shiftwidth=4 
setl tabstop=4 

(インデントであなたの好みに4を置き換える)

行は段落を形成した場合、通常モードで>apがシフトします現在の位置の上と下の段落全体。

18

。ビジュアルモードescを残すと、最初の行のすべての変更がすべての行に適用されます。

おそらくキーストロークの数に最も効率的ではありませんが、ビジュアルモードを離れる前に自由に自由にすることができます。正規表現コマンドで行と列の範囲を手で指定しなければならないときは、私はそれが気に入らない。

+2

ああ!これは実際にはとても素晴らしいトリックです!最初の行の変更は、選択したブロックの残りの部分に適用されます。共有ありがとう! – nye17

+0

これはVIMについて楽しいことですが、常に発見すべきことがあります。これは私には新しいものでした。 –

2

私はニグが好きです。別の解決策は:normalを使用することである。

  1. <S-v>
  2. :norm I<Space><Space>を選択する視線モード
  3. 3j又はjjj又は/D<CR>を入力するために、正しい範囲('<,'>)が自動的
挿入されます

:normalはこの特定のケースではおそらく少し過剰ですが、時にはabある範囲の線上での複雑な操作の不確実性。

+0

うわー、あなたはすでにこれについて私たちに言った!私はそれを+1しましたが、私はそれをとてもよく読んではいけません。 ':ノーマル'は私の新しい友達です。 –

+0

':正常なあなたの友人は永遠になります。 – romainl

9
  1. Ctrlキーが+ V(ビジュアルモードに入ります)
  2. ライン
  3. を選択するには矢印キーを使用してShiftキー+ iの
  4. ヒットスペースキーまたは何でもしたい(挿入モードに表示されます)選択した行の前に入力します。
  5. 変更を保存して(使用:w)、選択したすべての行に変更が表示されます。
1

あなたが試みることができるもう一つはマクロです。あなたはまだわからない場合、あなたはqでマクロを起動しますので、通常モードでqaを入力しレジスタaでマクロを保存するために...マクロを保存するレジスタを選択します。

下部に記録言う何かがあるはずです。今すぐあなたの動きをあなたが望むようにしてください。

だからこのケースでは、最初の行の先頭で、すでにあなたのカーソルでそのすべての行の前に2つのスペースを、望んでいた、挿入モードに入り、二回スペースを打ちます。エスケープを押して通常モードにしてから次の行に移動し、その行の先頭に移動してqを押します。これでマクロが終了して保存されます

(すべて1か所に表示されます。バー:qai<space><space><esc>j0qこれはレジスタaでマクロを保存します)今

あなたがで...ので、この例@aでそれを保存した登録続く@を行うマクロバックを再生します。今度は2行目にも2つのスペースがあります。

マクロは、複数回実行することができますので、私は[email protected]をした場合、マクロは、3回を実行します、そして、あなたはこれを行うことでしょう。

このようにマクロを使用するのは、わかりやすいためです。私がしたいことを正確に行うことができ、複数回再生するだけです。

関連する問題