0%

AStyle代码排版整理

安装

两种安装方式:

  1. 官网下载源码编译安装
  2. sudo apt-get install astyle

配置

两种配置方式:

  1. 配置文件~/.astylerc
  2. 执行命令携带参数

配置文件例子如下:

--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,超过之后进行换行

Ref

  1. 使用astyle美化代码
  2. Vim整合AStyle进行代码美化
  3. Astyle编程语言格式化工具的中文说明
  4. Astyle:代码格式化工具简明指南
  5. Artistic Style 3.1