Vimでテキストをある程度の長さに折り返すにはどうすればよいですか?


102

相対的な対策についてお話ししましょう。私のVimは次のようになります。

aaaaaaaaaaaaa 
bbbbbbbbbbbbb 
ccccccccccccc 
etc

私はそれを小さくしたいと思います:

aaaaa
aaaaa
bbbbb
bbbbb
ccccc
ccccc
etc

どうすれば入手できますか?そして、そのようなブロックの長さの設定をどのように管理できますか?


テキストをインデントするのではなく、テキストを折り返すのですか?
lc。

lc:違いはわかりません。ラップを勧められたので書こうと思っていましたが、うまくいきませんでした。
レオ・レオポルド・ヘルツ준 영

回答:


177

あなたは実際に2つのことをすることができます:

  1. 改行を挿入して、vimでテキストの行を短く(つまり変更)します
  2. 行はそのままにしますが、折り返して表示します

どちらがいいですか?

オプション1は、textwidth(たとえば:set textwidth=30(Swaaropの回答から))を設定することによって達成されます。次に、テキストを(ビジュアルモードで)強調表示してと入力することにより、テキストを再フォーマットできますgq。(したがって、textwidthと省略できます。)tw:set tw=30

オプション2は、:set wrap/ を実行して切り替えることができます:set nowrap。これはウィンドウに対して長すぎる行を折り返します。

どちらも独立しています。


33
ビジュアルモードからのgqキーコマンドの+1。これは非常に便利です
Fire Crow

3
参考までに、これはスペースで壊れ、tw = 5であっても、gqgqは質問に示されているような行に対して何もしません。
dlamblin 2011

2
@Dlamblin:正解です。空白を考慮せずに、指定された幅で正確に折りたたむ場合はfold、fgmの回答のようにコマンドを使用します。
sleske 2011

あなたのオプションは私が見る限りでは機能しません。wrapではなく、ウィンドウの境界で折り返しますtextwidth
DerWeh 2018年

@DerWeh:はい、ウィンドウの境界で折り返します。明確にするために編集しました。
sleske 2018年

60

'textwidth'を設定したら、ビジュアルモードでテキストを選択し、gqを押してうまくラップできます(一部の古い/レガシー構成でQを使用することもできます)。

いくつかの役立つヒント:

gqq (wrap the current line)
gq} (wrap this 'paragraph', i.e. until the next blank line)
:h gq

3
+ 1、vim中に誤ってgqを打った、私が打ったものを確認しようと最後の30時間を費やした。これはとても便利です。
user176121 2011年

gqqgqgqまたはの代わりにgq$)現在の行も折り返します。
アッシュ

21

fold(1)の使用は1つの可能性です。

:%!fold -w5 

結果:

aaaaa
aaaaa
aaa 
bbbbb
bbbbb
bbb 
ccccc
ccccc
ccc

1
これも折りたたみスペースを考慮していません
ライオネル

7
@Lionel:はい。スペースを尊重するには、foldコマンドにオプション「-s」を追加します。
sleske 2011

14
:set textwidth=30

元のポスターの例のように、スペースがない場合、textwidthはそれをどのように処理しますか?私は遊びましたが、スペースがある場合(または、おそらく、breakat変数が別の値に設定されている場合)、テキスト幅に基づいてフォーマットするようです。
アンディ

3
@Andy textwidthはスペースがない状況を処理しません。あなたはそれをするためにあなた自身のformatexpr関数を書くことができます。
スワループCH

8

特定の長さで分割したいスペースのないテキストがある場合、externalを使用する必要foldも、独自のを記述する必要もありませんformatexpr

:%s/\(.\{80\}\)/\1\r/g

すべての行を80文字で改行します。


2
OpenSSL証明書を復活させている間、これは私の日を救いました。ありがとう
Cengiz Can 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.