← Vim道場

長い行を折り返す

コメントやドキュメントを書いていると、1行が長くなりすぎて読みづらくなります。gq は指定した幅で折り返し直す整形の操作で、手で改行を入れ直す必要がなくなります。

第5章 整えて探すレッスン 23 / 36

折り返す幅は設定で決まる

何文字で折り返すかは textwidth という設定で決まります。0(既定値)だと折り返さないので、使う前に set textwidth=80 のように決めておく必要があります。この練習ページでは扱う文章に合わせて40文字にしてあります。

set textwidth を決めておくと、入力中に自動で折り返してくれるようにもなります。文章を書くファイルでだけ有効にしたいなら、ファイルの種類ごとに設定を分けます。

gq と gw の違い

gq は整形が終わったあとカーソルが末尾へ移動します。カーソル位置を動かしたくないときは gw を使うと、元の位置に留まったまま整形されます。書きながら何度も整形するなら gw のほうが快適です。

段落単位で整形したいときは gqap(この段落)や gqip がよく使われます。空行が段落の区切りとして扱われます(この練習ページでは段落のテキストオブジェクトは扱っていません)。

どこまでを1段落とみなすか

gq が扱う段落の区切りは空行です。空行を入れずに書いた長い文章は全体が1つの段落として扱われ、まとめて折り返されます。意図しない範囲まで整形されるときは、区切りたい場所に空行が入っているかを確かめてください。

箇条書きの行は特別扱いされます。formatlistpat という設定に一致する行頭(既定では 1.- のような形)は項目の始まりとみなされ、2行目以降は項目の頭にそろえて字下げされます。整形したら箇条書きが1つにつながってしまった、という場合はこの設定を疑います。

日本語の折り返しには設定が要る

Vimは既定では空白の位置で行を折り返すので、空白を使わない日本語の文章では思った位置で切れません。set formatoptions+=mM を書くと、日本語の文字と文字の間でも折り返せるようになり、折り返しの前後に余計な空白も入らなくなります。

m が「多バイト文字の間で折り返してよい」、M が「多バイト文字をつなぐときに空白を入れない」という意味です。日本語のファイルを扱うなら、この2つはほぼ必須になります。

整形を外部のツールに任せる

formatprg に外部コマンドを指定しておくと、gq がそのコマンドに文章を渡して整形するようになります。Vim本体の折り返しでは足りないとき、たとえば決まった書式に整えるツールを持っている場合に使えます。

コードの整形も同じ考え方で、formatprg をファイルタイプごとに設定しておけば gqG でファイル全体を通せます。ただしコードの場合は保存時に自動で整形する仕組みを使うほうが多いので、gq の主な相手は文章だと考えておくと整理できます。

このレッスンで扱うキー

キー動き
gqqこの行を折り返す
gqG最終行までを整形
gqj次の行までを整形

関連記事

レッスン一覧へ戻るキーの逆引き一覧検定を受ける