次: , 前: Mode-Specific Indent, 上: Indentation


31.17.3 領域全体の字下げ

本節では、領域内のすべての行を字下げするコマンドについて述べます。 これらは予測できない値を返します。

— コマンド: indent-region start end to-column

このコマンドは、start(を含めて)と end(を含めない)のあいだで始まる空でない各行を字下げする。 to-columnnilであると、 indent-regionは、現在のモードの字下げ関数、 つまり、indent-line-functionの値を呼び出して、 空でない各行を字下げする。

to-columnnil以外であると、 それは字下げ先のコラム番号を指定する整数であること。 すると、この関数は、白文字を追加するか削除して、 各行を指定どおりに字下げする。

詰め込み接頭辞がある場合、 indent-regionは詰め込み接頭辞で行を始めることで各行を字下げする。

— 変数: indent-region-function

この変数の値は、indent-regionの短縮版として利用可能な関数である。 領域の開始位置と終了位置の2つの引数をとる。 領域の行を1つ1つ字下げする場合と同じ結果を生じるが、 より速く動作することを意図してこの関数を設計するべきである。

値がnilであると短縮版はなく、 indent-regionが実際に1行ずつ処理する。

短縮版関数はCモードやlispモードのようなモードで有用である。 そのようなモードでは、indent-line-functionで関数定義の始まりを 走査する必要があり、これを各行に適用すると自乗の時間がかかる。 短縮版では、字下げし終えた関数定義を通過するたびに 走査情報を更新でき、これには線形時間かかるだけである。 個々の行を高速に字下げできるモードでは、短縮版は必要ない。

引数to-columnnil以外を指定したindent-regionには 別の意味があり、この変数を使わない。

— コマンド: indent-rigidly start end count

このコマンドは、start(を含めて)と end(を含めない)のあいだで始まる行すべてを コラム数countだけ字下げする。 これは、領域を1つの塊として動かしてその領域の『形を保つ』。 このコマンドは、字下げしていないテキストの領域だけでなく、 整形済みの領域を字下げするためにも有用である。

たとえば、countが3であると、 このコマンドは指定した領域内の各行の行頭に3コラムの字下げを追加する。

メイル(mail)モードでは、C-c C-ymail-yank-original)が 返信対象のメッセージからコピーしたテキストを字下げするために indent-rigidlyを使っている。

— 機能: indent-code-rigidly start end columns &optional nochange-regexp

この関数はindent-rigidlyと同様であるが、 文字列やコメントで始まる行を変更しない点が異なる。

さらに、(nochange-regexpnil以外のとき) 行の先頭がnochange-regexpに一致する場合にも行を変更しない。