indent コマンド

目的

C 言語プログラムを再フォーマットします。

構文

indent InputFile [ OutputFile ] [ -nbad | -bad ] [ -nbap | -bap ] [ -nbbb | -bbb ] [ -nbc | -bc ] [ -br | -bl] [ -cn] [ -cdn ] [ -ncdb | -cdb ] [ -nce | -ce ] [ -cin ] [ -clin ] [ -dn ] [ -din ] [ -ndj | -dj ] [ -nei | -ei ] [ -fa ] [ -nfa ] [ -nfc1 | -fc1 ] [ -in ] [ -nip | -ip ] [ -ln ] [ -lcn ] [ -nlp | -lp ] [ -npro ] [ -npcs | -pcs ] [ -nps | -ps ] [ -npsl | -psl ] [ -nsc | -sc ] [ -nsob | -sob ] [ -nslb | -slb ] [ -st ] [ -troff ] [ -nv | -v ] [ -TType ] ...

説明

indent コマンドは、コマンドと共に入力されたフラグで指定されたとおりに、C プログラムを再フォーマットします。

InputFile パラメーターだけを指定すると、再フォーマットされたファイルが InputFile パラメーターに書き込まれ、 InputFile パラメーターのバックアップ・コピーが、現行ディレクトリーに .BAK ファイル名接尾部付きで書き込まれます。

OutputFile パラメーターを指定すると、indent コマンドは確かにその名前が InputFile パラメーターと異なっているかどうかを検査します。

indent コマンドのデフォルト値であるユーザー自身のプロファイルを設定するには、 ログイン・ディレクトリーまたは現行ディレクトリー内に .indent.pro と呼ばれるファイルを作成します。 このファイルに、必要な数のフラグをスペース、タブ、または改行で区切って入力します。

現行ディレクトリー内の .indent.pro ファイルに含まれているフラグは、 ログイン・ディレクトリー内のフラグをオーバーライドします (ただし、-TType フラグは例外で、累算します)。 indent コマンドが実行され、しかもプロファイル・ファイルが存在している場合は、そのプロファイル・ファイルが読み取られて、プログラムのデフォルトが設定されます。 ただし、コマンド・ラインにフラグを入力した場合には、プロファイルのフラグはオーバーライドされます。

コメントの扱い

indent コマンドは、 コメントの開始マーカーの直後に - (ダッシュ) または * (アスタリスク) が付いているコメント (/*- または /**) を、 アスタリスクで囲まれたコメントであると解釈します。そのようなコメントの各行は、字下げ以外は変わらないままです。コメントの 1 行目の字下げ変更に合わせて、各行の字下げも調整することができます。

それ以外のコメントは、すべてテキストとして扱われます。indent コマンドは、可能な限り多くのワードを (ブランク、タブ、または改行で区切って) 各行に合わせることができます。 ブランク行はパラグラフを区切ります。

ブロック・コメントは、コードの右にはないコメントのことで、2 行以上にまたがります。

コードのある行にコメントを入れる場合、その開始部分は、-cn フラグによって設定されたコメント欄に置かれます。 それ以外の場合、コメントは、コードが現在置かれている位置よりも字下げレベルが n 個低い位置で開始されます。 その場合の n は、-dn フラグによって指定されます。 ある行でコードがコメント欄まで及ぶ場合は、コメントはさらに右の位置から開始されます。極端な場合は、右マージンが自動的に拡張されることがあります。

プリプロセッサー行の扱い

indent コマンドは通常、プリプロセッサー行だけを残します。このコマンドが行う唯一の再フォーマットは、後書きコメントの整理です。その場合は、組み込みコメントだけが残されます。 条件付きコンパイル (#ifdef 行と #endif 行の間のコード) が認識されると、 indent コマンドはインストールされた構文上の特殊性を適切に補正しようとします。

C 構文の扱い

indent コマンドに組み込まれたパーサーは、フォーマットが不完全な構文や誤りのある構文に対処しようとします。特に、以下のマクロ

#define forever for(;;)

を使うと、正しく処理されます。最良の結果を得るためには、ソースの構文を正しく記述して indent コマンドを使用します。

フラグ

注: フラグは、ファイル名の前か後に付けることができます。

項目 説明
-bad 宣言の各ブロックの後を強制的にブランク行にします。
-nbad 宣言の各ブロックの後のブランク行を抑制します。-bad フラグでオフにしない限り、アクティブです。
-bap 各プロシージャー本体の後ろを強制的にブランク行にします。
-nbap 各プロシージャー本体の後ろのブランク行を抑制します。-bap フラグでオフにしない限り、アクティブです。
-bbb 各ブロック・コメントの前を強制的にブランク行にします。
-nbbb 各ブロック・コメントの前のブランク行を抑制します。-bbb フラグでオフにしない限り、アクティブです。
-bc 宣言内のそれぞれのコンマの後で強制的に改行します。
-nbc 宣言内のそれぞれのコンマの後の改行を抑制します。-bc フラグでオフにしない限り、アクティブです。
-bl 複合ステートメント、構造体の初期化、および enum の初期化を次のようなフォーマットにします。
if (...)
{
   code
}
-br 複合ステートメント、構造体の初期化、および enum の初期化を次のようなフォーマットにします。
 if (...) {
    code
}

このフラグは、-bl フラグでオフにしない限り、アクティブです。

-cn コードのコメントが開始されるタブ位置を n 変数に設定します。デフォルト値は 33 です。
-cdn 宣言のコメントが開始されるタブ位置を n 変数に設定します。デフォルトでは、このフラグは -c フラグで定義される値を使用します。
-cdb ブランク行にコメント区切りを付けるようにします。-ncdb フラグでオフにしない限り、アクティブです。-cdb フラグの影響が及ぶのはブロック・コメントだけであり、 コードの右側のコメントに対しては機能しません。結果としてのコメントは、次のようになります。
/*
 * this is a comment
 */
-ncdb ブランク行にコメント区切りを付けないようにします。-ncdb フラグの影響が及ぶのはブロック・コメントだけであり、コードの右側のコメントに対しては機能しません。 結果としてのコメントは、次のようになります。
/* this is a comment */
-ce } (右中括弧) の直後に else ステートメントを置けるようにします。-nce フラグでオフにしない限り、アクティブです。
-nce } (右中括弧) の直後に else ステートメントを置けないようにします。
-cin 継続行を、ステートメントの 1 行目の先頭から数えて n 位置まで字下げします。 -lp フラグが有効になっていない場合、小括弧内の式にはネストを表す特殊な字下げが追加されます。 デフォルトでは、このフラグは -i フラグで定義した値を使用します。
-clin case ラベルを、そこに入っているフラグ・ステートメントの右へ n 桁分字下げします。 「-cli0.5」と入力すると、case ラベルがタブ・ストップの半分だけ字下げされます。小数部の引数が付けられるのは、このオプションだけです。 デフォルト値は -cli0 です。
-dn コードの右にないコメントの配置を n 変数で制御します。-d1 フラグを指定すると、そのコメントはコードの左側に字下げレベル 1 で出力されます。 デフォルトでは、このフラグは -d0 を使用し、コメントはコードと位置合わせされます。 コメントの字下げは、プログラム・コードと相対的なコメント行の位置に影響されます。
-din 先行する宣言キーワードから ID を n 変数だけ字下げするための桁数を指定します。デフォルトでは、このフラグは -di16 を使用します。
-dj 宣言を左寄せにします。
-ndj 宣言を字下げします。-dj フラグでオフにしない限り、アクティブです。
-ei 特殊な else-if 処理を使用可能にします。-nei フラグでオフにしない限り、アクティブです。 -ei フラグを使用すると、else ステートメントに続く if ステートメントが、 先行する if ステートメントと同じように字下げされます。
-nei 特殊な else-if 処理を使用不可にします。
-fa 代入演算子を旧スタイルの C コードから ANSI フォーマットに反転します。このフラグは、-nfa フラグでオフにしない限り、アクティブです。

注意: コードが ANSI コンパイラー用に書かれている場合は、コードの意味が変更される可能性があります。 例えば、A=-BA-=B になります。

注: 演算子間にはスペースを入れないでください。ユーザーが減算の意味を示す場合は、反転が必要になります。また、ユーザーが A はマイナス B に等しいという意味を示す場合は、反転によって意味が変更されます。

-nfa 演算子の反転を抑制します。コードが ANSI コンパイラー用に書かれている場合は、このフラグを使用します。
-fc1 カラム 1 から始まるコメントのフォーマットを使用可能にします。-nfc1 フラグでオフにしない限り、アクティブです。
-nfc1 カラム 1 から始まるコメントのフォーマットを使用不可にします。
-in 字下げレベルのサイズを設定します。デフォルトでは、レベル・サイズは 8 桁です。
-ip 字下げパラメーターの宣言を使用可能にします。-nip フラグでオフにしない限り、アクティブです。
-nip 字下げパラメーターの宣言を使用不可にします。
項目 説明
-ln コードの右側にあるコメントの位置の最大桁を設定します。コメントが 1 行に収まらない場合は、最大 25 文字が出力されます。
-lcn ブロック・コメント行の最大長を n 変数に設定します。デフォルトでは、このフラグは -l フラグに指定された長さを使用します。
-lp 継続行上の小括弧で囲まれたコードを位置合わせします。-nlp フラグでオフにしない限り、アクティブです。 ある行に 1 組の小括弧のうちの左括弧だけがある場合 (対応する右括弧がない場合)、継続行は左括弧の次の位置から始まります。

-lp フラグが有効になっていると、継続行は次のように出力されます。


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

さらに 2 つの改行を挿入すると、次のようになります。


p1 = first_procedure(second_procedure(p2,
                                      p3),
                     third_procedure(p4,
                                     p5));
-nlp 継続行の小括弧で囲まれたコードを位置合わせしないまま残します。-nlp フラグが有効になっていると、継続行は次のように出力されます。
p1 = first_procedure(second_procedure(p2,p3),
         third_procedure(p4, p5));
-npro プロファイル・ファイル ./.indent.pro および $HOME/.indent.pro が無視されます。
-pcs 各プロシージャー・コール名とそれに続く ( (左小括弧) の間に、スペースを挿入します。
-npcs 各プロシージャー・コール名とそれに続く ( (左小括弧) の間のスペースを抑制します。-pcs フラグでオフにしない限り、アクティブです。
-ps -> 演算子に続くポインターの両側にスペースを挿入します。
-nps -> 演算子に続くポインターの両側のスペースを抑制します。-ps フラグでオフにしない限り、アクティブです。
-psl 定義しているプロシージャーの名前が左寄せされます。-npsl フラグでオフにしない限り、アクティブです。プロシージャーのタイプが存在する場合は、そのまま前の行に残ります。
-npsl 定義したプロシージャーの名前の左寄せを使用不可にします。
-sc * (アスタリスク) をコメントの左に配置できるようにします。-nsc フラグでオフにしない限り、アクティブです。
-nsc * (アスタリスク) をコメントの左に配置できないようにします。
-slb コードの右側にない単一行のコメントをブロック・コメントとして扱います。
-nslb コードの右側にない単一行のコメントをブロック・コメントとして扱わないようにします。-slb フラグでオフにしない限り、アクティブです。
-sob オプションのブランク行を除去します。-nbad-nbap-nbbb のいずれかのフラグと組み合わせると、機能します。 -bad-bap、または -bbb フラグで挿入されたブランク行だけを除去します。
-nsob オプションのブランク行を保存します。-sob フラグでオフにしない限り、アクティブです。
-st indent コマンドがその入力を stdin から取り込み、出力を stdout に送信するようになります。
-TType タイプ・キーワードのリストに Type 変数を追加します。名前は、累算されます。つまり、-T を複数指定できます。 indent コマンドから最良の出力を得るには、typedef ステートメントによって定義されたプログラム内のすべてのタイプを指定する必要があります。
-troff troff が処理できるように C プログラムをフォーマットします。vgrind コマンドによって作成されるリストに類似したリストを作成します。 出力ファイルを指定しないと、デフォルトはその場合のフォーマットではなく標準出力となります。
-v 詳細モードをオンにします。これによって、1 行の入力がいつ 2 行以上の出力に分割されるのかが報告され、実行完了時にサイズに関する統計情報が表示されます。
-nv 詳細モードをオフにします。-v フラグでオフにしない限り、アクティブです。

  1. indent コマンドのデフォルト設定を使用して test.c ファイルをフォーマットし、出力を newtest.c ファイルに収めるには、次のように入力します。
    
    indent test.c newtest.c
  2. test.c ファイルをフォーマットして各宣言のブロックとプロシージャー本体の後にブランク行を強制的に入れ、他のすべてのデフォルト設定を使用して、出力を newtest.c ファイルに入れるには、次のように入力します。
    indent test.c newtest.c -bad -bap
  3. indent コマンドのデフォルト設定を使用して test.c ファイルをフォーマットし、さらに uintindent コマンドが認識できるタイプ・キーワードとして定義するには、次のように入力します。
    
    indent test.c newtest.c -Tuint

ファイル

項目 説明
./.indent.pro プロファイル・ファイルが入っています。
$HOME/.indent.pro プロファイル・ファイルが入っています。
/usr/ccs/bin/indent indent コマンドが入っています。