web-dev-qa-db-ja.com

viのカーソル位置から始まる空白のブロックを挿入する方法は?

現在、カーソルが最初のAに留まっている下のテキストを持っているとします。

AAAA
BBB
CC
D

各行の前にスペースを追加して好きなようにする方法はありますか?.

  AAAA
  BBB
  CC
  D

視覚モードですばやくそれを行う方法があると思いますが、何かアイデアはありますか?

現在、私はビジュアルモードでテキストの最初の列を2回コピーし、2列全体をスペースに置き換えています。

制約:

質問を明確に述べておらず、混乱を招く可能性があることを申し訳ありません。

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

編集:

@DeepYellowと@Johnsywebの両方に感謝します。どうやら>}および>apはすべて私が知らなかった素晴らしいヒントであり、質問に対する回答の特定の要件を明確にする前に両方とも有効な回答になる可能性がありますが、いずれにせよ、@ luser droogの回答は唯一のものです実行可能な答え。みんなありがとう!

28
nye17

:%s/^/ /を使用します

行の範囲を指定することもできます:10,15s/^/ /

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

または、場所に正規表現を使用します:/A/,/D/>

コードをコピーしてSOに貼り付けるには、通常、端末からsedを使用しますsed 's/^/ /' filename


ショートカット

私は今学んだ これのための新しいトリック。ビジュアルモードvを入力し、領域を選択して(通常の移動コマンド)、次に:を押すと、次のようになります。

:'<,'>

上記のコマンドのcommand部分だけを入力する準備ができました。マーク'<および'>は、視覚的な選択範囲に自動的に設定されます。

現在の段落を選択してインデントするには:

vip>

または

vip:>

に続く enter

編集:

コメントで要求されているように、anyメタ文字\{n}の正規表現量指定子.を使用して、行の中央にスペースを追加することもできます。

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

これにより、各行の左から14文字のスペースが追加されます。もちろん、%は、exコマンドの範囲を指定するための上記のオプションのいずれかに置き換えることができます。

47
luser droog

最初のAのとき、ブロック表示モードになりますctrl-v、変更する行を選択し、I(大文字のiでモードを挿入)を押し、最初の行に必要な変更を適用します。ビジュアルモードescを終了すると、最初の行のすべての変更がすべての行に適用されます。

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

27
Nigu

私は使用します >}

どこ...

  • > :右にシフトし、
  • } :段落の終わりまでを意味します

お役に立てれば。

14
Johnsyweb
  1. Ctrl + v(ビジュアルモードで入力)
  2. 矢印キーを使用して行を選択します
  3. Shift + i(挿入モードに移動します)
  4. 選択した行の前にスペースキーまたは入力したいものを押します。
  5. 変更を保存し(使用:w)、選択したすべての行に変更が表示されます。
12
Jubi

私は二宮が好きです。別の解決策は、:normal

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

:normalは、おそらくこの特定のケースでは少しやり過ぎですが、場合によっては、一連の行に対して一連の複雑な操作を実行することができます。

6
romainl

ビジュアルモードで行を選択し、>。これは、スペースを挿入するようにタブを設定していることを前提としています。例:

setl expandtab
setl shiftwidth=4
setl tabstop=4

(4をインデントの設定に置き換えます)

行が段落を形成する場合、>ap通常モードでは、段落全体が現在の位置の上下に移動します。

4

コードのブロックをシフトしたいとします:

  • 各シフトコマンドで使用されるスペースの数を設定します、:set shiftwidth=1、デフォルトは8です。
  • 押す Ctrl+vを適切な場所に置き、カーソルをkまたはjの下に移動して、領域を選択します。
  • 押す >はブロックをシフトし、.を使用して、目的の位置までアクションを繰り返します(カーソルが見つからない場合は、hまたはbで元に戻します)。

move block of code

1
Purkhalo Alex