Cモードおよび関連するモードは、インデントをカスタマイズするために柔軟なメカニズムを使用します。Cモードはソース行を2ステップでインデントします。最初のステップは、行の内容とコンテキストに応じて行の構文を分類します。次のステップで、構文コンストラクトで選択されたスタイルにより、関連付けられたインデントのオフセットを決定して、これをアンカーとなる命令文(anchor statement)のインデントに加えます。
事前定義されたスタイルstyle
(CCモードではc-set-style
、tree-sitterベースのc-ts-mode
ではc-ts-mode-set-style
)を選択します。
スタイルとは、Cモードおよび関連するモードで使用できるカスタマイズ用の名前つきコレクションです。完全な説明は、Styles in The CC Mode
Manualを参照してください。Emacsには、gnu
、k&r
、bsd
、stroustrup
、linux
、python
、java
、whitesmith
、ellemtel
、awk
を含む、事前に定義されたスタイルがいくつか付属します。これらのスタイルのうちいくつかは、主に1つの言語を意図したものですが、他のスタイルはこれらのモードをサポートする任意の言語で使用できます。スタイルがどのように見えるかは、何らかのコードにたいしてスタイルを選択して、(たとえば関数定義の最初でC-M-qとタイプして)再インデントしてみることです。
カレントバッファーのスタイルを選択するには、コマンドC-c .を使用します。引数として、スタイル名を指定します(大文字小文字に意味はありません)。このコマンドはカレントバッファーだけに影響し、将来のインデントコマンドの呼び出しだけに影響します。そのバッファーにすでにあるコードの再インデントはしません。バッファー全体を新しいスタイルで再インデントするには、C-x h C-M-\とタイプしてください。
CCモード使用時には変数c-default-style
をセットして、さまざまなメジャーモードにたいしてデフォルトのスタイルを指定できます。この値は、スタイル名(文字列)、または各要素が1つのメジャーモードと、それに使用するインデントスタイルを指定するalistです。たとえば、
(setq c-default-style '((java-mode . "java") (awk-mode . "awk") (other . "gnu")))
これはJavaモード、AWKモードにたいして明示的に選択して、その他のC-likeなモードにたいしては、デフォルトの‘gnu’スタイルを指定します。この変数はC-likeなメジャーモードを選択したときに効果を表します。したがってJavaモードにたいして新しいデフォルトスタイルを指定するには、既存のJavaモードのバッファーで、M-x java-modeとタイプすることにより効果が表れます。
tree-sitterベースのc-ts-mode
を使用時には、変数c-ts-mode-indent-style
をカスタマイズすることによってデフォルトのインデントスタイルをセットできます。
gnu
スタイルは、CにたいするGNUプロジェクトで推奨されるフォーマットを指定します。これがデフォルトで、私たちが使用を推奨するスタイルです。
既存のスタイルのオーバーライドや、独自のスタイルを定義する方法など、Cおよび関連するモードにたいするインデントのカスタマイズに間する情報は、Indentation Engine Basics in the CC Mode Manual、およびCustomizing Indentation in the CC Mode Manualを参照してください。
スタイルを指定するかわりに、サンプルコードのバッファーでM-x c-guessとタイプすることにより、Emacsにスタイルを推測させることができます。その後、M-x c-guess-installとして、推測されたスタイルを他のバッファーに適用できます。詳細については、Guessing the Style in the CC Mode Manualを参照してください。