web-dev-qa-db-ja.com

テキスト幅のフォーマットを元に戻すVim

Textwidth = 80のvimでドキュメントを書きました。このドキュメントをlibreofficeに貼り付けてフォーマットします。問題は改行です。 libreofficeでは、vimによって80文字の後に改行が挿入されているため、行が短すぎます。

2つの改行文字を使用して段落を区切ります(つまり、returnキーを2回押します)。\n\n文字を保持したまま、すべての単一の\ n文字を削除する方法はありますか?

4
Moyamo

このようなもの

:%s/\(\S\)\n/\1
:%s/\n/&&

動作するはずです。まあ、それはここで行います。

最初の置換は「非空白文字」(より具体的である可能性があります)と一致し、その後に改行が続き、置換で使用するためにその「非空白文字」をキャプチャします(\1)。実際には、すべての「段落」が1行になります。

2つ目は、すべての改行文字を2つの改行文字に置き換えます。 &は「一致したテキスト」を意味する代わりに使用されるため、ここで&&は「2つの改行文字」を意味します。 :%s/\n/\r\rと書くこともできますが、&&の方が短くなります。

0
romainl

各段落でVipJを使用できます。

  • V:行ごとの選択を開始します。
  • ip:段落全体を選択します。
  • J:行を結合します。

各段落を2つの改行で区切るため、マクロを記録してこれを自動的に行うことができます。

qqVipJ2jq

[〜#〜] n [〜#〜]段落を結合するには、[〜#〜] n [〜#〜]@qを使用します。

6
Symaxion

Vimでこれを行う方法はいくつかありますが、最も簡単な方法は次のとおりです。

:set tw=9999
gggqG

これにより、カーソルがバッファの最初の行(gg)に移動し、そこからすべての行が最後の行(gq)に再フォーマット(G)されます。見る

:help gq
2
garyjohn