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
textwidth
を80(:set textwidth=80
)に設定し、ファイルの先頭に移動します(次の方法で実行できます) Ctrl-Home またはgg
)、およびgqG
と入力します。
gqG
は、現在の位置からファイルの終わりまでのテキストをフォーマットします。可能であれば、連続する行を自動的に結合します。 2つの行を結合したくない場合は、2つの行の間に空白行を配置できます。
Michaelのソリューションが鍵ですが、私はほとんどの場合、現在の段落の残りの部分を再フォーマットしたいと思っています。この動作には、gq}
を使用します。
gq
を任意の移動演算子で使用できます。たとえば、現在の行の最後にのみ再フォーマットする場合(つまり、カーソルが置かれている行を折り返す場合)、gq$
を使用できます。
ビジュアルモードでテキストを選択し( `vと移動を使用)、gqを入力して再フォーマットすることもできます。
行を強制的に折り返す他のオプションもあります。
テキストを再構築するために最後まで待たずに、テキストを挿入している間にvimで行を折り返したい場合は、次のオプションが便利です。
:set textwidth=80
:set wrapmargin=2
(wrap
およびlinebreak
によってサイドトラックされません。これらは、画面に表示されるテキストのみを再フォーマットし、バッファー内のテキストは変更しません)
DonaldSmithからのコメントのおかげで、textwidth
オプションが長いテキスト行を再フォーマットしなかったため、これを見つけました(16進数からバイトへの変換でプレイを変換していました)。
:%!fold -w 60
これにより、ファイル全体(私にとっては1行)が長さ60の行に再編成されました。
non-Vimの方法を探しているなら、常にUNIXコマンド fmt と par 。
ノート:
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
を呼び出してください。
ほとんどの場合、ビジュアルモードではgq
を使用します。私は生徒たちに「紳士の季刊」の略で、気難しい人向けの雑誌だと伝えています。