安装
两种安装方式:
- 官网下载源码编译安装
- sudo apt-get install astyle
配置
两种配置方式:
- 配置文件~/.astylerc
- 执行命令携带参数
配置文件例子如下:
--style=linux # -A8
--indent=force-tab # -T, 强制 TAB 缩进
--break-blocks # -f, Pad empty lines around header blocks (e.g. 'if', 'for', 'while'...)
--attach-namespaces # -xn, Attach brackets to a namespace statement
--attach-classes # -xc, Attach brackets to a class statement
--delete-empty-lines # -xe, 删除函数内多余的空行
--align-pointer=name # -k3, *号靠近变量名
--remove-brackets # -xj, if,while,for 等代码是单行行时,去掉 {}
--close-templates # -xy, 模板中无空格, 如:Stack<int,List<int>> stack1;
--pad-oper # -p, 运算符两边加空格
--indent-preproc-define # -w, 宏定义缩进
--indent-col1-comments # -y, 注释缩进
--unpad-paren # -U, Remove extra space padding around parenthesis on the inside and outside
--pad-header # -H, 关键字后加空格
--break-after-logical # -xL
--lineend=linux # -z2
--indent=tab # -t
执行参数例子如下:
-A8xnxcxek3xyfTpEwyUHxLz3t
命令
自动排版命令:
indent -npsl
astyle -A8xnxcxek3xyfTpEwyUHxLz3t
find -name "*.[ch]*" | xargs indent -npsl | xargs astyle -A8xnxcxek3xyfTpEwyUHxLz3t
与vim结合
最终成品如下:
function! CodeFormat()
ks
"let curfile = expand("%")
"let curfile = expand("%:t")
"echo curfile
silent! %s/^M//g
silent! exec '%!astyle -A3LYfpjk3NSEUHwyW3xC100 --style=break'
silent! %g/^\s*$\n\s*$/d
silent! %s/\s\+$//g
's
endfunction
autocmd BufNewFile,BufRead *.c call CodeFormat()
autocmd BufNewFile,BufRead *.h call CodeFormat()
nmap <leader><leader>q :call CodeFormat()<CR>
解析如下:
- ks ‘s 保存当前行位置
- expand(“%”) 取file变量
- expand(“%:t”) 取文件名
- silent! 静默执行命令
- %s/^M//g 将
删除,相当于dos2unix - exec 执行命令
- %!astyle -A3LYfpjk3NSEUHwyW3xC100 –style=break 携带参数执行外部命令
- %g/^\s$\n\s$/d 删除多行空行为一行
- %s/\s+$//g 删除行尾空格
- autocmd BufNewFile,BufRead *.c 打开c文件时,自动调用函数CodeFormat()
- nmap 映射快捷键
astyle参数解析:
- -A3: Kernighan & Ritchie style uses linux brackets
- -L: 标签缩进
- -Y: 注释缩进
- -f: 空行分隔没有关系的块,类,标签(不包括函数块)
- -p: 操作符两端插入一个空格
- -j: if,while,for 等代码是单行行时,加 {}
- -k3: *号靠近变量名
- -N: 缩进命名空间定义行
- -S: switch 与case不同列,case缩进
- -E: 块间空行的换行符前插入一个空格
- -U: 移除括号两端多余空格
- -H: 关键字后加空格
- -w: 宏定义缩进
- -y: else catch左边的大括号与else catch分隔
- -W3: &号靠近变量名
- -xC100: 代码最大长度100,超过之后进行换行