現在、カーソルが最初のA
に留まっている下のテキストを持っているとします。
AAAA
BBB
CC
D
各行の前にスペースを追加して好きなようにする方法はありますか?.
AAAA
BBB
CC
D
視覚モードですばやくそれを行う方法があると思いますが、何かアイデアはありますか?
現在、私はビジュアルモードでテキストの最初の列を2回コピーし、2列全体をスペースに置き換えています。
制約:
質問を明確に述べておらず、混乱を招く可能性があることを申し訳ありません。
ターゲットはより大きなファイルの一部にすぎないため、最初のA
から始まる行と列の数を指定できると便利です。
編集:
@DeepYellowと@Johnsywebの両方に感謝します。どうやら>}
および>ap
はすべて私が知らなかった素晴らしいヒントであり、質問に対する回答の特定の要件を明確にする前に両方とも有効な回答になる可能性がありますが、いずれにせよ、@ luser droogの回答は唯一のものです実行可能な答え。みんなありがとう!
:%s/^/ /
を使用します
行の範囲を指定することもできます:10,15s/^/ /
または相対範囲:.,+5s/^/ /
または、場所に正規表現を使用します:/A/,/D/>
。
コードをコピーしてSOに貼り付けるには、通常、端末からsedを使用しますsed 's/^/ /' filename
私は今学んだ これのための新しいトリック。ビジュアルモードv
を入力し、領域を選択して(通常の移動コマンド)、次に:
を押すと、次のようになります。
:'<,'>
上記のコマンドのcommand部分だけを入力する準備ができました。マーク'<
および'>
は、視覚的な選択範囲に自動的に設定されます。
現在の段落を選択してインデントするには:
vip>
または
vip:>
に続く enter。
編集:
コメントで要求されているように、anyメタ文字\{n}
の正規表現量指定子.
を使用して、行の中央にスペースを追加することもできます。
:%s/^.\{14}/& /
これにより、各行の左から14文字のスペースが追加されます。もちろん、%
は、exコマンドの範囲を指定するための上記のオプションのいずれかに置き換えることができます。
最初のAのとき、ブロック表示モードになりますctrl-v
、変更する行を選択し、I
(大文字のi
でモードを挿入)を押し、最初の行に必要な変更を適用します。ビジュアルモードesc
を終了すると、最初の行のすべての変更がすべての行に適用されます。
おそらく、キーストロークの数が最も効率的ではありませんが、ビジュアルモードを終了する前に必要なすべての自由が得られます。 regexコマンドで行と列の範囲を手で指定しなければならないときは気に入らない。
私は二宮が好きです。別の解決策は、:normal
:
<S-v>
VISUAL-LINEモードに入る3j
またはjjj
または/D<CR>
行を選択するには:norm I<Space><Space>
、正しい範囲('<,'>
)自動的に挿入されます:normal
は、おそらくこの特定のケースでは少しやり過ぎですが、場合によっては、一連の行に対して一連の複雑な操作を実行することができます。
ビジュアルモードで行を選択し、>
。これは、スペースを挿入するようにタブを設定していることを前提としています。例:
setl expandtab
setl shiftwidth=4
setl tabstop=4
(4をインデントの設定に置き換えます)
行が段落を形成する場合、>ap
通常モードでは、段落全体が現在の位置の上下に移動します。