vimの段落内の行を結合する


13

vimで自動改行をオンにして長いドキュメントを入力したため、すべての行がたとえば79文字で改行されたとします。文書全体にフォーマットを適用して、その長さのすべての行を分割することもできます。

段落は、ドキュメント内で空白行で区切られます。

ここで、段落内で改行をまったく使用しないことにしました。

段落の境界を完全に削除せずに、段落内のすべての改行を削除するにはどうすればよいですか?

この迅速でばかげたハックを作成しましたが、適切な方法を探しています。

:%s/^\s*$/@@@@@ - replace blank lines with @@@@@
ggVGgJ           - join all lines in the file
:%s/@@@@@/\r\r/g   - replace @@@@@ with line breaks

ねえ、あなたのソリューションが動作し、あなたのソリューションが動作する場合、それをノックしないでください。
pdwalker

回答:


12

私はこれがあなたが望むことをすると思います:ファイルの終わりに空の行があることを確認してから、すべての段落を結合します(空の行で終了します)。

G:a

.
:g/^./ .,/^$/-1 join

説明:最初にファイルの最後に移動し、余分な空行を追加します:a(よりエレガントな方法があるかもしれません。対話的に、最初の3行をで置き換えることができますo<ESC>)。次に、まだ考慮されていないすべての非空白行(:g/^./)に対してjoin、選択された行(.)で始まり、次の空行の前の1行で終わる範囲()にコマンドを適用します/^$/-1

必要に応じて、:g/^$/d空白行を残したくない場合(その後、削除できます-1)。


ありがとう。これは私にとって非常に近づいていますが、段落間の空白行を削除しています。(私はfileformat unixを試し、それがWindowsのものかどうかを確認しました)。また、コマンドを少し翻訳してもらえますか?Gは最後の行に移動します。:aによると、「追加」ですが、それが何をするのかわかりません。そこにあるg / pattern / cmdも私を失いました。コマンドは何ですか?
dggoldst

@dggoldst:空の行を保持するようにコマンドを変更しました。最初の3行は、ファイルの最後に空の行を追加するだけです(それ以外の場合、最後の段落は一致しません)。最後のコマンドは:g、一致するすべての行にコマンドを適用します。改行を削除したときの動作については:help :g、おそらくこのスレッドを:g参照してください。
ジル 'SO-悪であるのをやめる'

:$pu _ 最後にブラックホールレジスタを配置します。これにより、最後に空白行が作成されます。
SergioAraujo

12

これはそれを行う必要があります:

:set tw=99999
gggqG

tw少なくとも最長の段落の文字数と同じ大きさの値に設定されます。ggカーソルを最初の行に移動します。gq再フォーマットするコマンドです。Gカーソルを最後の行に移動gqし、現在のカーソル位置から最後の行に再フォーマットするよう指示します。


5
  1. 目的の段落内にカーソルを設定します

  2. タイプ: vipJ

vip現在の段落を強調表示し、Jすべての行を結合します)


2

それを行う最もクリーンな方法ではないかもしれませんが、ここに私が使用するものがあります:

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カウントは、少なくともファイル内の段落の数である必要があります- 必要に応じてより大きな数を選択し、プロセッササイクルのみを失うことができます。段落間の空白行を1つだけと仮定すると、次を使用してより正確な段落数を取得できます。

:%s/^$//gn     # returns "999 matches on 999 lines"

これは私のために動作します。ファイルの先頭にカーソルを置くために、先頭に「gg」を追加するとよいでしょう。また、gJの代わりにJを使用しても、別々の単語が1つにまとめられることはありません。これは、「formatoptions」の値の場合にのみ当てはまるかもしれませんが、これは現在私を困惑させています。
dggoldst
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.