次: , 前: Fill Commands, 上: Filling


19.5.3 詰め込み接頭辞

各行が(段落を字下げする数個の空白などの)特別の印で始まっている 段落を詰め込むには、詰め込み接頭辞(fill prefix)の機能を使えます。 詰め込み接頭辞は文字列であり、 Emacsはすべての行がその文字列で始まると仮定しますが、 詰め込み接頭辞自体は詰め込みの対象ではありません。 明示的に詰め込み接頭辞を指定できますが、 Emacsが詰め込み接頭辞を自動的に推測することもできます (see Adaptive Fill)。

C-x .
詰め込み接頭辞を設定する(set-fill-prefix)。
M-q
現在の詰め込み接頭辞を使って、段落を詰め込む(fill-paragraph)。
M-x fill-individual-paragraphs
字下げ幅の変化を新たな段落の始まりとみなして、リージョン内を詰め込む。
M-x fill-nonuniform-paragraphs
段落を分割する行だけを新たな段落の始まりとみなして、リージョン内を詰め込む。

詰め込み接頭辞を指定するには、 目的の接頭辞で始まっている行に移動して接頭辞の直後にポイントを置いてから、 コマンドC-x .set-fill-prefix)を実行します。 C-xのあとはピリオドです。 詰め込み接頭辞の使用をやめるには、空の接頭辞を設定します。 つまり、行頭にポイントを置いてからC-x .と打ちます。

詰め込み接頭辞が設定されている場合、 詰め込みコマンドは処理に先だって各行から詰め込み接頭辞を取り除き、 詰め込みを行ったあとに各行に挿入します。 自動詰め込み(auto-fill)モードでも、 新たに行を作成するときに自動的に詰め込み接頭辞を挿入します。 行頭でC-oコマンド(see Blank Lines)を使用すると、 新たに作成する行にも詰め込み接頭辞を挿入します。 逆に、コマンドM-^は、 削除する改行の直後に詰め込み接頭辞があると接頭辞も削除します (see Indentation)。

たとえば、fill-columnが40で詰め込み接頭辞が`;; 'のときに、 つぎのテキストでM-qを実行します。

     ;; This is an
     ;; example of a paragraph
     ;; inside a Lisp-style comment.

結果はつぎのようになります。

     ;; This is an example of a paragraph
     ;; inside a Lisp-style comment.

M-qおよび段落コマンドは、 詰め込み接頭辞で始まらない行を段落の始まりとみなします。 これにより、ぶら下がり字下げ(先頭行を除いてすべての行が字下げ) された段落も正しく詰め込みます。 空行や接頭辞を取りさると字下げした行になる行も、 段落の区切りや始まりとみなします。 これによって、各行にコメント区切りがある複数段落のコメントを 書いているときにも、望みどおりの結果を得られます。

各段落に対して自動的に詰め込み接頭辞を設定するには、 M-x fill-individual-paragraphsを使います。 このコマンドは、字下げ幅の変化を新たな段落の始まりとみなして、 リージョンを段落に分割したあと、各段落を詰め込みます。 つまり、1つの『段落』内の行はどれも同じ字下げ幅です。 字下げ幅が、段落に対する詰め込み接頭辞として働きます。

M-x fill-nonuniform-paragraphsも同様なコマンドですが、 リージョンを段落に分割する方法が異なります。 このコマンドは、(変数paragraph-separateで定義される) 段落区切り行だけを新たな段落の始まりとみなします。 つまり、各段落の行はさまざまに字下げされているかもしれないので、 その中の最少の字下げを詰め込み接頭辞として使用するわけです。 段落の最初の行の字下げが残りの行に比べて多くても少なくても、 正しい詰め込み結果を得られます。

詰め込み接頭辞は変数fill-prefixに格納されます。 この値は文字列であるか、詰め込み接頭辞が設定されていなければnilです。 この変数を変更してもカレントバッファだけに影響しますが、 デフォルト値を変更することもできます。 See Locals

テキスト属性indentationは、 段落に与える字下げ幅を調整する別の方法です。 See Format Indentation