web-dev-qa-db-ja.com

テキストを80列に再構成/強制するvimコマンド

set textwidthを使用して、vimのテキストの幅を自動的に設定する方法があることを知っています( Vim 80列のレイアウトの問題 など)。私が探しているのは、=(インデント行コマンド)に似ていますが、80に折り返します。 。

理想的には、このコマンドは選択した行を完全に再編成し、短い行に追加しながら長い行を切り取ります。例:

long line is long!  
short

コマンドを実行した後(ラップが13 colであると仮定):

long line is  
long! short

これが本当のvimコマンドでは不可能な場合、おそらくこれを行うコマンドラインプログラムがあり、入力をパイプすることができますか?

検索した後、いくつかのオプションがあるこのリファレンスを見つけました: http://www.cs.swarthmore.edu/help/vim/reformatting.html

222
wickedchicken

textwidthを80(:set textwidth=80)に設定し、ファイルの先頭に移動します(次の方法で実行できます) Ctrl-Home またはgg)、およびgqGと入力します。

gqGは、現在の位置からファイルの終わりまでのテキストをフォーマットします。可能であれば、連続する行を自動的に結合します。 2つの行を結合したくない場合は、2つの行の間に空白行を配置できます。

352
Michael Madsen

Michaelのソリューションが鍵ですが、私はほとんどの場合、現在の段落の残りの部分を再フォーマットしたいと思っています。この動作には、gq}を使用します。

89
Alex Hirzel

gqを任意の移動演算子で使用できます。たとえば、現在の行の最後にのみ再フォーマットする場合(つまり、カーソルが置かれている行を折り返す場合)、gq$を使用できます。

ビジュアルモードでテキストを選択し( `vと移動を使用)、gqを入力して再フォーマットすることもできます。

行を強制的に折り返す他のオプションもあります。

テキストを再構築するために最後まで待たずに、テキストを挿入している間にvimで行を折り返したい場合は、次のオプションが便利です。

:set textwidth=80
:set wrapmargin=2

wrapおよびlinebreakによってサイドトラックされません。これらは、画面に表示されるテキストのみを再フォーマットし、バッファー内のテキストは変更しません)

34
JohnGH

DonaldSmithからのコメントのおかげで、textwidthオプションが長いテキスト行を再フォーマットしなかったため、これを見つけました(16進数からバイトへの変換でプレイを変換していました)。

:%!fold -w 60

これにより、ファイル全体(私にとっては1行)が長さ60の行に再編成されました。

18
shearn89

non-Vimの方法を探しているなら、常にUNIXコマンド fmtpar

ノート:

  • Unicodeについてコメントすることはできません。異なる動作をする場合としない場合があります。
  • @nelstromはすでに彼のウェブキャストでparの使用について言及しています。

以下に、両方の例を使用して例を示します。

$ echo -e 'long line is long!\nshort' > 3033423.txt
$ cat 3033423.txt
long line is long!
short
$ fmt -w 13 3033423.txt
long line is
long!  short
$ par 13gr 3033423.txt
long line is
long! short

Vimの内部から使用するには:

:%! fmt -w 13
:%! par 13gr

:formatprgをparまたはfmtに設定し、gqをオーバーライドすることもできます。詳細については、Vim内で:help formatprgを呼び出してください。

13

ほとんどの場合、ビジュアルモードではgqを使用します。私は生徒たちに「紳士の季刊」の略で、気難しい人向けの雑誌だと伝えています。

6
ncmathsadist