# 1.命令简介

indent 通过插入或删除空格来改变 C 代码文件的外观。

indent 可以格式化 C 代码文件,以方便程序员阅读、修改等操作。

# 2.命令格式

indent [options] [input-files]
indent [options] [single-input-file] [-o output-file]
indent --version

# 3.选项说明

-bad, --blank-lines-after-declarations
	在声明后加上空白行。
-bap, --blank-lines-after-procedures
	强制在过程体后加空行。
-bbb, --blank-lines-before-block-comments
	强制在注释块之前插入空行。
-bbo, --break-before-boolean-operator
	更喜欢在布尔运算符之前将长行分开。
-bc, --blank-lines-after-commas
	在声明段中,如果出现逗号就换行。
-bl, --braces-after-if-line
	在 if(或 else、for 等)后面加大括号。
-blf, --braces-after-func-def-line
	在函数定义行后面加大括号。
-bli, --brace-indent N
	缩进大括号 N 个空格。
-bls, --braces-after-struct-decl-line
	在结构声明行后面加大括号。
-br, --braces-on-if-line
	在 if(或 else、for 等)后面加上大括号。
-brf, --braces-on-func-def-line
	在函数定义行上加大括号。
-brs, --braces-on-struct-decl-line
	在 struct 声明行上加大括号。
-bs, --Bill-Shannon, --blank-before-sizeof
	在 sizeof 和它的参数之间加一个空格。
-c, --comment-indentation N
	将注释置于程序右侧指定的栏位。
-cbi, --case-brace-indentation N
	在 case 标签后缩进大括号 N 个空格。
-cd, --declaration-comment-column N
	将注释置于声明右侧指定的栏位。
-cdb, --comment-delimiters-on-blank-lines
	注释符号自成一行。
-cdw, --cuddle-do-while
	do {} while 语句中将 while 仅靠前面的 }。
-ce, --cuddle-else
	将 else 仅靠前面的 }。
-ci, --continuation-indentation N
	叙述过长而换行时,指定换行后缩排的空格数。
-cli, --case-indentation N
	使用 case 时,switch 缩排的空格数。
-cp, --else-endif-column N
	将注释置于 else 与 elseif 叙述右侧指定的栏位。
-cs, --space-after-cast
	在转换运算符之后空一格。
-d, --line-comments-indentation N
	针对不是放在代码右侧的注释,设置其缩排空格数。
-bfda, --break-function-decl-args
	在声明中所有参数之前换行。
-bfde, --break-function-decl-args-end
	在声明的最后一个参数之后换行。
-dj, --left-justify-declarations N
	如果使用 -cd 0 则声明后的注释在声明后面对齐。
-di, --declaration-indentation N
	将声明区段的变量置于指定的栏位。
-fc1, --format-first-column-comments
	针对放在每行最前端的注释,设置其格式。
-fca, --format-all-comments
	设置所有注释的格式。
-gnu, --gnu-style
	使用指定的 GNU 格式,该参数为默认值。
-hnl, --honour-newlines
	更喜欢在输入中换行的位置打断长行。
-i, --indent-level N
	将缩进级别设置为 N 个空格。
-il, --indent-label N
	将标签的偏移量设置为第 N 列
-ip, --parameter-indentation N 
	旧式函数定义中的参数类型缩进 N 个空格。
-kr, --k-and-r-style
	指定使用 Kernighan & Ritchie 的格式。
-l, --line-length N
	将非注释行的最大长度设置为 N。
-lc, --comment-line-length N
	设置注释格式的最大行长为 N。
-linux, --linux-style
	使用 Linux 编码风格。
-lp, --continue-at-parentheses
	叙述过长而换行,且叙述中包含了括号时,将括号中的每行起始栏位内容垂直对齐排列。
-lps, --leave-preprocessor-space
	在“#”和预处理器指令之间留出空格。
-nlps, --remove-preprocessor-space
	删除“#”和预处理器指令之间的空格。
-nbad, --no-blank-lines-after-declarations
	在声明区段后不要加上空白行。
-nbap, --no-blank-lines-after-procedures
	不要在过程体之后强制空行。
-nbbo, --break-after-boolean-operator
	不喜欢在布尔运算符之前打断长行。
-nbbb, --no-blank-lines-before-block-comments
	在块注释前不要有空行。
-nbc, --no-blank-lines-after-commas
	不要在声明中的逗号后强制换行。
-nbfda, --dont-break-function-decl-args
	不要将每个参数放在单独一行的函数声明中。
-ncdb, --no-comment-delimiters-on-blank-lines
	注释符号不自成一行。
-ncdw, --dont-cuddle-do-while
	do {} while; 中不讲 }while 仅靠在一起。
-nce, --dont-cuddle-else
	不将 else 置于 } 后面。
-ncs, --no-space-after-casts
	不要在转换运算符后放置空格。
-ndjn, --dont-left-justify-declarations
	声明后的注释与其他语句后的注释被视为相同。
-nfc1, --dont-format-first-column-comments
	不要像往常一样格式化第一列中的注释
-nfca, --dont-format-comments
	不用格式化任何注释。
-nhnl, --ignore-newlines
	不喜欢在输入中换行的位置打断长行。
-nip, --no-parameter-indentation
	参数不要缩进。
-nlp, --dont-line-up-parentheses
	叙述过长而换行,且叙述中包含了括号时,不用将括号中的每行起始栏位垂直对其排列。
-npcs, --no-space-after-function-call-names
	在调用函数名之后,不要添加空格。
-nprs, --no-space-after-parentheses
	不要在“(”之后和“)”之前放置一个空格。
-npro, --ignore-profile
	不要读取 indent 的配置文件“.indent.pro”。
-npsl, --dont-break-procedure-type
	程序类型与程序名称放在同一行。
-nsaf, --no-space-after-for
	不要在 for 后加空格。
-nsai, --no-space-after-if
	不要 if 后加空格。
-nsaw, --no-space-after-while
	不要在 while 后加空格
-nsc, --dont-star-comments
	注释左侧不要添加星号。
-nsob, --leave-optional-blank-lines
	不用处理多余的空白行。
-nss, --dont-space-special-semicolon
	若 forwhile 区段仅有一行时,在分号前不加空格。
-nut, --no-tabs
	使用空格 space 而不是制表符 tab。
-nv, --no-verbosity
	不显示详细的信息。
-orig, --original
	使用原始的 Berkeley 编码风格。
-pcs, --space-after-procedure-calls
	在调用函数名与“(”之间添加空格。
-pi, --paren-indentation N
	当语句被打破时,指定每个开括号'('的额外缩进。
-pmt, --preserve-mtime
	保留对输出文件的访问和修改时间。
-ppi, --preprocessor-indentatio N
	指定预处理器条件语句的缩进。
-prs, --space-after-parentheses
	在每个“(”后面和“)”前面都加一个空格。
-psl, --procnames-start-lines
	将过程的类型放在它的名称之前。
-saf, --space-after-for
	for 之后加一个空格。
-sai, --space-after-if
	if 之后加一个空格。
-saw, --space-after-while
	while 之后加一个空格。
-sbi, --struct-brace-indentation N
	结构、联合或枚举的大括号缩进 N 个空格。
-sc, --start-left-side-of-comments
	在每行注释左侧添加星号。
-sob, --swallow-optional-blank-lines
	删除多余的空行。
-ss, --space-special-semicolon
	若 for 或 wile 区段仅有一行时,在分号前加上空格。
-st, --standard-output
	将结果显示在标准输出设备上。
-T
	数据类型名称缩进。
-ts, --tab-size N
	设置 Tab 的长度为 N 个空格。
-ut, --use-tabs
	使用 tabs,这是缺省行为。
-v, --verbose
	显示详细的执行过程。
--version
	显示版本信息。

# 4.常用示例

假设我们有如下未格式化的 C 代码 main.c。

#include <stdio.h>

// Prints Hello.
int
foo ()
{
puts("Hello");
}
// Prints World.
char *
bar ()
{
puts("World");
}

int main(void){
foo();
bar();
}

(1)采用预设的 GNU 风格进行格式化。

indent -gnu main.c -o main.gnu.c

格式化后的结果为

#include <stdio.h>

// Prints Hello.
int 
foo () 
{

puts ("Hello");
}

// Prints World.
char *
bar () 
{

puts ("World");
} 

int

main (void)
{
  
foo ();
  
bar ();
}

(2)采用预设的 Kernighan & Ritchie 风格格式化。

indent -kr main.c -o main.kr.c

格式化后的结果为

#include <stdio.h>

// Prints Hello.
int 
 foo() 
{
    
puts("Hello");
} 

// Prints World.
char *
 bar() 
{
    
puts("World");
} 
 
int main(void)
{
    
foo();
    
bar();
} 

(3)采用预设的 Berkeley 风格格式化。

indent -orig main.c -o main.orig.c

格式化后的结果为

#include <stdio.h>

    // Prints Hello.
int            
foo() 
{
    
puts("Hello");
} 
    // Prints World.
char           *
bar() 
{
    
puts("World");
} 
 
int
main(void)
{
    
foo();
    
bar();
}

(4)所有的 sizeof 后面添加一个空格且删除多余的空行。

indent -bs -sob <input-file> -o <output-file>

(5)查看版本。

indent --version
GNU indent 2.2.11

# 参考文献

indent(1) - Linux manual page - man7.org (opens new window)

Last Updated: 5/17/2024, 1:47:36 AM