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,indent 会检查以确保它不同于 input-file。
下方列出的选项控制 indent 利用的格式设置样式。
如果指定了 -bacc,会在每个条件编译块周围强制设置一个空白行。例如,在每个 #ifdef 前面以及在每个 #endif 后面。将吞并这些周围的其他空白行。缺省值:-nbacc。
如果指定了 -bad,会在每个声明块后面强制设置一个空白行。缺省值:-nbad。
如果指定了 -bap,会在每个过程主体后面强制设置一个空白行。缺省值:-nbap。
如果指定了 -bbb,会在每个块注释前面强制设置一个空白行。缺省值:-nbbb。
如果指定了 -bc,则会在声明中每个逗号后面强制设置一个换行符。-nbc 可关闭此选项。缺省值:-bc。
指定 -bl 可使复合语句按如下方式排齐:
if (...) { code }
指定 -br(缺省值)可使它们如下所示:
if (...) { code }
启用(禁用)在 sizeof 后面强制设置一个空白。有些人认为,sizeof 应该如同过程调用一样出现(-nbs,缺省值);有些人认为,由于 sizeof 是一个运算符,所以始终应该这样对待,并且它后面始终应该有一个空白。
代码注释开始的列。缺省值为 -c33。
声明注释开始的列。缺省设置是使这些注释开始的列与代码注释的相同。
启用(禁用)在空白行上放置注释分隔符。如果启用了此选项,注释如下所示:
/* * this is a comment */
而不是如下所示:
/* this is a comment */
这仅影响块注释,而不影响代码右侧的注释。缺省值:-cdb。
启用(禁用)强制 else 紧接着前面紧靠的 '}'。缺省值:-ce。
将继续缩排设置为值 n。续行将从语句第一行的开头缩排值 n。除非 -lp 有效,否则扩入括号的表达式添加额外的缩排以表示嵌套。-ci 的缺省值与 -i 相同。
使条件标签向包含的 switch 语句右侧缩排 n 个制表停止位置。-cli0.5 使条件标签缩排半个制表停止位置。缺省值:-cli0。
控制不在代码右侧的注释的位置。缺省值 -d1 意味着,将此类注释向代码左侧放置一个缩排级别。指定 -d0 可使这些注释与代码排齐。请参见下文关于注释缩排的部分。
以字符位置指定从声明关键字到后跟标识符的缩排。缺省值:-di16。
-dj 向左对齐声明。-ndj 缩排声明的方式与代码相同。缺省值:-ndj。
如果启用了 -ei,else 后跟 if 的缩排与前面的 if 语句相同。如果禁用了此选项,else 后跟的 if 将缩排一个额外级别。缺省值:-ei。
如果指定了 -eei,额外表达式缩排将应用于 if() 和 while() 表达式部分的续行。这些续行将缩排一个额外级别-两次而非仅仅一次。这样做是为了避免继续表达式与 if() 或 while() 后跟的语句发生混淆。缺省值:-neei。
启用(禁用)从第 1 列开始的注释的格式设置。通常,前导 '/' 在第 1 列中的注释已由程序员小心地手动设置格式。在这种情况下,应使用 -nfc1。缺省值:-fc1。
一个缩排级别的空格数量。缺省值是一个制表停止位置 -i8。
启用(禁用)参数声明从左边界缩排。缺省值:-ip。
带有结尾注释的输出行的最大长度。缺省值:-l78。
将块注释的行长度设置为 n。缺省值与使用 -l 指定的常规行长度相同。
使续行中由括号括起的代码排齐。如果某个行中的左括号在该行中未闭合,则续行将排齐,从左括号后面的字符位置开始。例如,在 -nlp 有效的情况下,继续代码如下所示:
p1 = first_procedure(second_procedure(p2, p3), third_procedure(p4, p5));
在 -lp 有效的情况下(缺省值),代码看起来比较清晰:
p1 = first_procedure(second_procedure(p2, p3), third_procedure(p4, p5));
多插入几个换行符,将得到:
p1 = first_procedure(second_procedure(p2, p3), third_procedure(p4, p5));
此示例是使用 -lp 生成的。
忽略分析文件 ./.indent.pro 和 ~/.indent.pro。
如果为 true (-pcs),则源代码中的所有过程调用和声明都将在名称和 '(' 之间插入一个空格。缺省值:-npcs。
如果为 true (-psl),则定义的过程的名称将放入第 1 列-其类型(如果有)将在前几行左侧。缺省值:-psl。
启用(禁用)在所有注释左边界放置星号 ('*')。缺省值:-sc。
如果指定了 -sob,缩排将吞并可选空白行。可使用此选项除去声明后面的空白行。缺省值:-nsob。
indent 从标准输入接受输入,将其输出放入标准输出。
将 typename 添加到类型关键字列表中。名称会累积:-T 可指定多次。您需要指定出现在由 typedef 定义的程序中的所有类型名称-如果漏掉一些也无妨,但是程序的格式设置不会非常理想。这听起来像是必须要做的烦人的事情,但是在 C 中确实是问题的症状:typedef 会导致语言的语法发生变化,indent 无法找到所有 typedef。
使 indent 对程序进行格式设置,以便由 troff 处理。它将生成一个别致的列表,其精髓与 vgrind 大致一样。如果未指定输出文件,则缺省值是标准输出,而非原地进行格式设置。要获得经过 troff 处理的列表,常规方法是使用命令
indent -troff program.c | troff -mindent
-v 可打开“详细”模式,-nv 可将其关闭。在详细模式下时,如果将一行输入拆分为两行或多行输出,indent 会报告,并在完成时提供一些大小统计信息。缺省值:-nv。
您可以将自己缺省的“分析”设置为 indent,方法是在登录目录或当前目录中创建名为 .indent.pro 的文件,包括需要的所有开关。当前目录中的 .indent.pro 优先于登录目录中的该文件。如果运行 indent 且存在分析文件,则会读取它来设置程序的缺省值。但是,命令行中的开关始终覆盖分析文件开关。开关应该由空格、制表符或换行符分隔。
indent 假定注释开头后面紧跟短划线或星号(即 '/*-' 或 '/**')的任何注释都是由一方框星号框起的注释。此类注释的每一行保持不变,但其缩排可能进行调整,以体现注释第一行缩排的变化。
将其他所有注释都视为整齐文本。indent 在行中容纳尽可能多的词语(由空格、制表符或换行符分隔)。空白行可打断段落。
如果注释在带有代码的行中,则在注释列中开始,这由 -cn 命令行参数设置。否则,注释的开始位置比代码当前放置的位置小 n 个缩排级别,其中 n 由 -dn 命令行参数指定。如果代码所在的行扩展超过注释列,则注释的开始位置进一步向右,在极端情况下,右边界可能会自动扩展。
一般来说,indent 不干预预处理程序行。唯一要做的重新格式设置工作是整理结尾注释。不干预嵌入注释。可识别条件编译 (#ifdef...#endif),并且 indent 尝试对引入的语法独特性进行适当弥补。
indent 对 C 语法非常了解,但是它有“宽容的”解析程序。它尝试处理不完整和格式错误的语法的正常排序。尤其是,如下宏的使用:
#define forever for(;;)
将经过正确处理。
不干预这两个注释之间的所有文本。因此,将源代码放在这两个注释之间时,不受重新设置格式的影响。
分析文件
分析文件
troff(1)
往往导致失败的常见错误是向 shell 中键入:
indent *.c
以尝试缩排目录中的所有 C 程序。