现在的位置: 首页 > 综合 > 正文

利用indent格式化源文件的脚本

2018年04月02日 ⁄ 综合 ⁄ 共 941字 ⁄ 字号 评论关闭

脚本一:格式化指定目录下的源文件(*.h, *.cpp...)

#!/bin/sh

# 格式化某目录下所有*.h, *.c, *.cpp, *.hh文件, 并将文件换行符转换成Linux下的格式

if [ $# -lt 1 ]; then
	echo "Usage: $0 <dir>"
	exit 1
else
	dir=$1
fi

# format a source file(*.c, *.h, *.cpp, *.hh)
formatSrcfile()
{
	dos2unix $1
	indent -npro -nip -lp -npsl -npcs -i4 -ts4 -sob -l140 -ci4 -ss -nsaf -nsai -nsaw -bl -bli0 $1
	rm -f "$1"~
}

# save file path to file
find $dir -name '*.h' -o -name '*.c' -o -name '*.cpp' -o -name '*.hh' > tmp

# format every file in tmp
while read file
do
	formatSrcfile $file
done < tmp

# remove tmp file
rm -f tmp

脚本二:格式化指定的文件

#!/bin/sh

# 格式化指定的文件, 并将文件换行符转换成Linux下的格式

if [ $# -lt 1 ]; then
	echo "Usage: $0 file1 file2 file*.cpp ..."
	exit 1
fi

# format a source file(*.c, *.h, *.cpp, *.hh)
formatSrcfile()
{
	dos2unix $1
	indent -npro -nip -lp -npsl -npcs -i4 -ts4 -sob -l140 -ci4 -ss -nsaf -nsai -nsaw -bl -bli0 $1
	rm -f "$1"~
}

for i in $*
do
	formatSrcfile $i
done


因为indent的参数很多,我这里用的格式不一定是所有人都喜欢的,所以如果不符合您的要求,请大家自己修改。

 

我这两个脚本都有一个bug,一直没找到解决办法,若有人解决了,还望告知下。bug如下:

就是上图左边的代码,会被格式成右边的样子,但是事实上对于左边这样的格式,我希望他能保持不变,不知如何修改indent参数呢?

 

另外,如果一个宏单独一行,且没有分号作结尾,他会将下一行的内容给捞上来的,哈哈!

 

抱歉!评论已关闭.