長い行を折り返す
コメントやドキュメントを書いていると、1行が長くなりすぎて読みづらくなります。gq は指定した幅で折り返し直す整形の操作で、手で改行を入れ直す必要がなくなります。
折り返す幅は設定で決まる
何文字で折り返すかは 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 | 次の行までを整形 |