自動改行をオンにしてvimで長いドキュメントを入力したため、すべての行がたとえば79文字で改行されたとします。ドキュメント全体にフォーマットを適用して、その長さのすべての行を分割することもできます。
段落は、ドキュメント内で空白行で区切られています。
ここで、段落内に改行を入れたくないと判断しました。
段落の境界を完全に削除せずに、段落内のすべての改行を削除するにはどうすればよいですか?
私はこれを素早くばかげたハックにしましたが、適切な方法を探しています。
:%s/^\s*$/@@@@@ - replace blank lines with @@@@@
ggVGgJ - join all lines in the file
:%s/@@@@@/\r\r/g - replace @@@@@ with line breaks
これはあなたが望むことをしていると思います:ファイルの終わりに空の行があることを確認してから、すべての段落を結合します(空の行で終了します)。
G:a
.
:g/^./ .,/^$/-1 join
説明:最初にファイルの最後に移動し、:a
を追加して空の行を追加します(これを行うためのより洗練された方法があるかもしれません。対話的に、最初の3行をo<ESC>
に置き換えることができます)。次に、まだ考慮されていない空白以外の行(:g/^./
)ごとに、選択した行(.
)で始まり1行で終わる範囲にjoin
コマンドを適用します。次の空の行の前の行(/^$/-1
)。
必要に応じて、空白行を残したくない場合は:g/^$/d
(その後、-1
を削除できます)。
これはそれを行う必要があります:
:set tw=99999
gggqG
tw
は、少なくとも最長の段落の文字数と同じ大きさの値に設定されます。 gg
はカーソルを最初の行に移動します。 gq
は再フォーマットするコマンドです。 G
はカーソルを最後の行に移動し、gq
に現在のカーソル位置から最後の行に再フォーマットするように指示します。
目的の段落内にカーソルを置きます
タイプ:vipJ
(vip
は現在の段落を強調表示し、J
はすべての行を結合します)
それを行うための最もクリーンな方法ではないかもしれませんが、これが私が使用するものです:
ggqav}bgJ}wq999@a # go to the top of the file (gg)
# start recording macro "a" (qa)
# select the entire paragraph (v})
# go back one Word so as not to join the blank line (b)
# join the selected lines without spaces (gJ)
# go to first Word of the next paragraph (}w)
# finish recording the macro (q)
# 999 times (arbitrary number of paragraphs to join)
# run macro "a" (@a)
(VIM 7.2。で動作します)
段落が最初にフォーマットされたときに分割された正確な方法によっては、gJ
コマンド(スペースなしで結合)をJ
コマンド(スペース付きで結合)に置き換えることができます。
任意の999
countは少なくともファイル内の段落数である必要があります-必要に応じてより大きな数を選択し、プロセッササイクルだけを失うことができます。段落間に空白行が1つしかない場合、次のコマンドを使用して、より正確な段落数を取得できます。
:%s/^$//gn # returns "999 matches on 999 lines"