indent(1)

名前
indent - C プログラムのソースファイルのインデントと書式化

形式
indent input-file [ output-file ] [ [ -bap | -nbap ]
[ -bacc | -nbacc ] [ -bad | -nbad ] [ -bbb | -nbbb ]
[ -bc | -nbc ] [ -bl ] [ -br ] [ -bs | -nbs ] [ -cn ]
[ -cdn ] [ -cdb | -ncdb ] [ -ce | -nce ] [ -cin ] [ -clin ] [ -dn ] [ -din ] [ -dj | -ndj ] [ -eei | -neei ]
[ -ei | -nei ] [ -fc1 | -nfc1 ] [ -in ] [ -ip | -nip ]
[ -ln ] [ -lcn ] [ -lp | -nlp ] [ -pcs | -npcs ] [ -npro ] [ -psl | -npsl ] [ -sc | -nsc ] [ -sob | -nsob ] [ -st ]
[ -T typename ] [ -troff ] [ -v | -nv ]

機能説明

indent は、C プログラムのフォーマッタです。入力ファイル input-file に含まれる C プログラムをオプションに従って書式化し直します。 指定できるオプションについては後述します。 オプションは、ファイル名の前でも後ろでも指定できます。

注意 : input-file だけを指定すると、 書式化された結果がファイル input-file に書き戻され、 input-file のバックアップがカレント・ディレクトリに書き込まれます。 input-file の名前が /blah/blah/file のとき、バックアップ・ファイルの名前は file.BAK となります。

output-file を指定すると、 そのファイルが input-file と異なるかどうかがチェックされます。

オプション

次に示すオプションは、 indent によって強制される書式を制御します。

-bacc,-nbacc
    -bacc を指定すると、 条件付きコンパイルブロックの前後にそれぞれブランク行が置かれます。 たとえば、 #ifdef の前と、 #endif の後ろには、必ずブランク行が挿入されます。 これらのブロックの前後の他のブランク行は削除します。 デフォルトは -nbacc で、これらの処理は行われません。

-bad,-nbad
    -bad を指定すると、 各宣言ブロックの後ろにブランク行が挿入されます。 デフォルトは -nbad で、この処理は行われません。

-bap,-nbap
    -bap を指定すると、各手続きの本体の後ろにブランク行が挿入されます。 デフォルトは -nbap で、この処理は行われません。

-bbb,-nbbb
    -bbb を指定すると、各ブロックコメントの前にブランク行が挿入されます。 デフォルトは -nbbb で、この処理は行われません。

-bc,-nbc
    -bc を指定すると、宣言の各コンマの後ろで改行が行われます。 -nbc を指定すると、この処理は行われません。 デフォルトは -bc です。

-br,-bl
    -bl を指定すると、複合文が次のように並べられます。
        if (...)
        {
                    コード
        }

    -br (デフォルト) を指定すると、複合文は次のようになります。
        if (...) {
                    コード
        }

-bs,-nbs
    -bs を指定すると、 sizeof の後ろにブランクが挿入されます。 sizeof を手続き呼び出しのように 指定するか ( -nbs を指定した場合 : デフォルト)、それとも、 sizeof は演算子であるため、他の演算子と同じようにその後ろにブランクを置くかは、 プログラマによって意見が分かれるところです。

-cn コードに関するコメントを開始するカラムを n に設定します。
    デフォルト値: -c33

-cdn
    宣言に関するコメントを開始するカラムを n に設定します。 デフォルトでは、コードに関するコメントと同じカラムから開始されます。

-cdb,-ncdb
    を指定すると、コメントの区切り文字がブランク行に置かれます。 たとえば、
    /* これはコメントです */

    は、次のようになります。
    /*
    *これはコメントです
    */

    -ncdb を指定すると、この処理は行われません。

    これらのオプションはブロックコメントだけを操作し、 コードの右側にあるコメントには影響を与えません。
    デフォルト値: -cdb

-ce,-nce
    を指定すると、 else とその直前にある `}' との間の空白が取り除かれます。 -nce を指定すると、この処理は行われません。
    デフォルト値: -ce

-cin
    継続行のインデントを n カラムに設定します。 各継続行が同じ文の先頭行の先頭カラムから n カラムだけインデントされます。 -lp が有効なとき、入れ子を示すために括弧で囲まれた式には インデントが追加されます。 n を指定しないと、 インデントのカラム数が -i と同じ値に設定されます。

-clin
    case のラベルを、それを含んでいる switch 文から、タブ n 個分インデントします。 -cli0.5 とすると、 case のラベルはタブの半分だけインデントされます。
    デフォルト値: -cli0

-dn コードの右側にあるコメント以外のコメントの配置を制御します。 デフォルトの -d1 では、各コメントがコードの先頭から 1 回インデントした位置に 配置されます。 -d0 を指定すると、各コメントはコードと同じ位置に配置されます。 後述の「コメントのインデント」を参照してください。

-din
    宣言のキーワードとそれに続く識別子の間を何文字あけるかを指定します。
    デフォルト値: -di16

-dj,-ndj
    -dj を指定すると、宣言が左揃えされます。 -ndj を指定すると、宣言はコードと同じ位置にインデントされます。
    デフォルト値: -ndj

-ei,-nei
    -ei を指定すると、 else に続く if は、その前の if 文と同じ位置にインデントされます。 -nei を指定すると、 else に続く if は、その前の if 文より 1 レベル深くインデントされます。
    デフォルト値: -ei

-eei,-neei
    -eei を指定すると、 if() および while() の式の部分の継続行が、 同じ式の先頭行よりさらに 1 レベル深く (つまり 2 レベル) インデントされます。 これは、継続が行われた式と、 if() または while() に続く文とを間違えないようにするためのものです。
    デフォルト値: -neei

-fc1,-nfc1
    -fc1 を指定すると、 カラム 1 から始まるコメントの書式化が行われます。 -nfc1 を指定すると、そのような書式化は行われません。 先頭の `/' がカラム 1 にあるコメントは、 多くの場合、プログラマが 1 つ 1 つ手作業で書式化したものです。 このような場合は、 -nfc1 を使用してください。
    デフォルト値: -fc1

-in 1 つのインデント・レベルのスペースの数を指定します。 デフォルトでは、1 つのタブと等しくなります。

-ip,-nip
    -ip を指定すると、パラメタの宣言が左マージンからインデントされます。 -nip を指定すると、この処理は行われません。
    デフォルト値: -ip

-ln 後ろのコメントを含む出力行の最大の長さを n カラムに設定します。
    デフォルト値: -l78

-lcn
    ブロック・コメントの行の長さを n カラムに設定します。 デフォルトでは、 -l で指定された通常の行の長さと等しくなります。

-lp,-nlp
    -lp を指定すると、継続行の中で括弧に囲まれているコードの位置が揃えられます。 ある行に、その行では閉じていない左括弧がある場合、 継続行は左括弧の直後にある文字と同じ位置から開始されます。 -nlp を指定すると、この処理は行われません。 たとえば、 -nlp が有効な場合に次のように書式化される継続行があるとします。
        p1 = first_procedure(second_procedure(p2, p3),
        third_procedure(p4, p5));

    -lp が有効な場合 (デフォルト)、コードは次のようによりはっきりします。
        p1 = first_procedure(second_procedure(p2, p3),
        third_procedure(p4, p5));

    いくつかの復帰改行 (NEWLINE) 文字を挿入すると、次のようになります。

        p1 = first_procedure(second_procedure(p2,
        p3),
        third_procedure(p4,
        p5));

    この例は、 -lp によって出力されたものです。

-npro
    プロファイル・ファイルの ./.indent.pro と ~/.indent.pro を無視します。

-pcs , -npcs
    -pcs を指定すると、ソースコード内のすべての手続き呼び出しと 手続きの宣言において、手続き名と '(' の間にスペースが挿入されます。
    デフォルト値: -npcs

-psl , -npsl
    -psl を指定すると、 定義されている手続きの名前がカラム 1 に置かれ、 その型があれば、前の行に置かれたままとなります。 -npsl を指定すると、この処理は行われません。
    デフォルト値: -psl

-sc,-nsc
    -sc を指定すると、すべてのコメントの左端にアスタリスク (`*') が置かれます。 -nsc を指定すると、この処理は行われません。
    デフォルト値: -sc

-sob,-nsob
    -sob を指定すると、インデント時に省略可能なブランク行が削除されます。 このオプションを使用すれば、 宣言の後ろのブランク行を排除できます。 デフォルト (-nsob) では、この処理は行われません。

-st indent は、処理対象のデータを標準入力から読み取り、結果を標準出力に書き込みます。

-T typename
    型のキーワードのリストに 名前 typename を追加します。 -T は複数回使用することができ、 指定した名前が累積されます。 typedef で定義した、プログラム内のすべての型名を指定する必要があります。 いくつかの型名を指定し忘れてもプログラムが壊されることはありませんが、 結果として、書式化が適切でない部分が残ります。 そのような部分は書式として不十分なだけでなく、 実際にプログラムで起こるかもしれない問題の兆候であることがあります。 typedef により言語の構文が変更されるため、 indent はすべての typedef を検出できません。

-troff
    indent は、 troff で処理するための書式化を行います。 これにより、 vgrind と同様の結果が得られます。 出力ファイルが指定されていないと、 結果は標準出力に出力され、入力ファイルは処理されません。 通常、 troff によって処理した出力を得るには、 次のコマンドを使用します。

        indent -troff program.c | troff -mindent

-v,-nv
    -v は「詳細情報」モードをオン、 -nv はオフにします。 詳細情報モードでは、 1 行を 2 行以上に分割した場合にそのことが報告され、 コンパイル時にサイズの統計情報が示されます。
    デフォルト値: -nv

使用法

ログイン・ディレクトリまたは現作業ディレクトリに .indent.pro というファイルを作成し、その中で使用したいオプションを指定すれば、 indent のデフォルトを決定する独自の「プロファイル」を設定できます。 現作業ディレクトリの .indent.pro は、ログインディレクトリの中にあるファイルより優先します。 indent の実行時にプロファイル・ファイルが存在すると、 そのプロファイル・ファイルが読み込まれ、 それに従ってプログラムのデフォルトが設定されます。 ただし、コマンド行のオプションはプロファイル内のオプションよりも常に優先します。 各オプションは、スペース、タブ、復帰改行文字で区切ってください。

  コメント

枠付き indent は、コメントの開始を示す文字列の直後がダッシュまたはアスタリスク (すなわち `/*-'または`/**') の場合、そのコメントがアスタリスクの枠によって囲まれていると想定します。 そのようなコメントを構成する各行は、変更しないでそのままにします。 ただし、コメントの先頭行のインデント位置が変更された場合は、 その位置に合わせてインデントの位置を調整します。

一般テキスト
    上記以外のコメントはすべて一般テキストとして扱います。 indent は各行にできるだけ多くのワードを (スペース、タブ、 復帰改行文字で区切って) 配置します。 ブランク行が現れると、段落の終わりと見なします。

  コメントのインデント

コメントと同じ行にコードがあると、 そのコメントは「コメントカラム」 (コマンド行パラメタ -cn によって設定されるもの) から開始します。 それ以外の行では、 現在のコードのインデント位置よりも n レベル (コマンド行パラメタ -dn によって指定されるもの) 少ない位置からコメントを開始します。 コードがコメントカラムの位置を超えた場合、 コメントはその位置よりも右側から開始され、 極端な場合、コメントを同じ行に納めるために 右マージンが自動的に拡張されることがあります。

  前処理行

通常、 indent は前処理文の右側にあるコメントの位置を揃えるだけで、 途中に埋め込まれているコメントは変更しません。 条件付きコンパイル (#ifdef...#endif) を認識し、構文的に特異な部分があると、それを補正しようとします。

  C の構文

indent は、C の構文の大部分を識別しますが、その解析はかなり甘いものです。 構文が不完全であったり、正しくなかったりした場合、 それが通常のものであれば対処しようとします。 特に、次のようなマクロは適切に処理することができます。

    #define forever for(;;)

  /*INDENT OFF*/ /*INDENT ON*/

この 2 つのコメントの間のテキストはすべてそのままにします。 したがって、ソースコードがこれらのコメントの間にあると、 書式の変更は行われません。

ファイル
./.indent.pro
    プロファイルファイル
~/.indent.pro
    プロファイルファイル

関連項目
troff(1)

使用上の留意点
よくある誤りの 1 つに、 ディレクトリ内のすべての C プログラムに対して indent を実行しようとして、シェルで
    indent *.c
と入力してしまい、失敗をしてしまうことがあります。