複数行のコードを、1度に再インデントしたいときがあるかもしれません。これを行う1つの方法は、マークを使う方法です。マークがアクティブでリージョンが空でないとき、TABはリージョン内の各行をインデントします。一方、コマンドC-M-\
(indent-region
)は、マークがアクティブか否かにかかわらず、リージョン内の各行をインデントします(インデントコマンドを参照してください)。
それらに加えて、Emacsはコードの大きな断片をインデントするために、以下のコマンドを提供します:
カッコでグループ化された、すべての行を再インデントします。
defunの中の単一のパラグラフフィル、あるいはそのdefun内のすべての行を再インデントします。
カッコでグループ化されたすべてを横にシフトして、最初の行が正しくインデントされるようにします。
リージョン内のすべての行を横にシフトしますが、コメントや文字列内で開始される行は変更しません。
1つのカッコでグループ化されたものを再インデントするには、ポイントをグループ化の前に配して、C-M-qとタイプします。これはグループ化されたものの全体的なインデント(たとえばグループ化が開始される行のインデント)は変更せずに、相対的なインデントを変更します。C-M-qで実行される関数は、Lispモードではindent-pp-sexp
、Cモードではc-indent-exp
、のようにメジャーモードに依存します。全体的なインデントも同様に訂正したい場合は、最初にTABをタイプします。
ポイントを取り囲むdefun全体を再インデントするにはM-q
(prog-fill-reindent-defun
)とタイプします。ポイントがコメントや文字列の中にある場合には、このコマンドはコメントや文字列のインデントではなくフィルを行います。コメント、文字列、defunが斉には何によって構成されるかはメジャーモード次第です。defunの境界は変数beginning-of-defun-function
とend-of-defun-function
(List Motion in The Emacs Lisp Reference
Manualを参照)、フィルのメカニズムはfill-paragraph-function
(Filling in The Emacs Lisp Reference Manualを参照)にバインドされた値によって決定されます。
グループ内の相対的なインデントは好ましいが、それの最初の行のインデントが好ましくない場合は、その最初の行にポイントを移動してC-u TABとタイプします。Lisp、C、他のいくつかのメジャーモードでは、数引数を指定したTABは通常どおりカレント行をインデントしてから、カレント行で始まる、カッコでグループ化されたすべての行を同じ量で再インデントします。このコマンドは巧妙なので、文字列内で開始される行は変更しません。CモードのときはCプリプロセッサー行は変更しませんが、それらにアタッチされた継続行は再インデントします。
コマンドM-x
indent-code-rigidlyは、indent-rigidly
が行うように(インデントコマンドを参照してください)、リージョン内のすべての行を厳格(rigidly)にシフトします。このコマンドはリージョンが文字列内で開始される場合を除き、文字列内で開始される行のインデントは変更しません。プレフィクス引数は、インデントする列数です。