用VIM和PHP_Beautifier格式化你的PHP代码

平常用IDE,如netbeans IDE,Phpstorm ,zendstudio 等,都有格式化代码的功能,用VIM能不能也实现这个功能呢?答案是YES。
最近接手修改一个由别人在N年前写的老PHP程序(各种BUG),代码可读性极差,因此想美化一下。于是有了此文。在此记录一下,方便
有同样需求的朋友查看。如果你有更好的办法,欢迎留言与我分享。 :smile:

STEP 1:
修改vim配置文件(*nix : .vimrc , win : _vimrc ) 添加:
map :% ! php_beautifier –filters “phpBB() EqualsAlign() ArrayNested() DocBlock()”

1
2
"用pear PHP_beautifier 格式化PHP代码,经测试,加上 DocBlock()有时会吃掉你的代码
map <C-b> :% ! php_beautifier --filters "phpBB() EqualsAlign() ArrayNested()"<CR>

个人最喜欢Allman bsd格式的Indent Style (缩进风格),
与PEAR的编码标准等不同的是,phpBB编码标准使用BSD风格的缩进。
phpBB编码标准:http://area51.phpbb.com/docs/30x/coding-guidelines.html
如果你喜欢用其它的,可以自行修改。
filter是可带参数的,filter之间用空格隔开:
“FilterName (param=value , param=value… FilterName…)”
也可单独指定Indent Style,如
IndentStyles(style=bsd)
详见:http://beautifyphp.sourceforge.net/docs/PHP_Beautifier/Filter/PHP_Beautifier_Filter_IndentStyles.html

STEP 2:
安装PHP_Beautifier
目前最新版为0.1.15

1
pear install PHP_Beautifier-0.1.15

或:

1
php pyrus.phar install pear/PHP_Beautifier-0.1.15

貌似已经OVER啦?NO,没完。

由于在开发环境中我们一般设置错误报告为: E_ALL | E_STRICT
由于此版本的PHP_Beautifier是2010年的东西,有些函数可能已经DEPRECATED了,因此运行时会产生E_DEPRECATED提示。而我们用此工具主要是用来美化我们的代码,提示信息的内容会混在VIM中显示的格式化后的结果中,因此,去掉是必需D。
修改php.ini 显然不是我们想要的。
试着在pear启动php biautifier的脚本中加上 -d error_reporting=0 ,但是依然显示E_DEPRECATED提示。于是看了下
php_beautifier 文件,此文件为shell版PHP_Beautifier的入口点,打开一看,第55行赫然写着:

1
 error_reporting(E_ALL);

速度把它修改为:

1
2
//用E_ALL &#038; ~E_DEPRECATED 也行
 error_reporting(E_ALL ^ E_DEPRECATED);

再在vim里面按ctrl+b 格式化代码,已经OK了。 :cool:

PHP beautifier 命令行方式的详细使用方法:
http://beautifyphp.sourceforge.net/docs/PHP_Beautifier/tutorial_PHP_Beautifier.howtouse.commandline.pkg.html
文档地址:http://beautifyphp.sourceforge.net/docs/

Command-line options
short option long option description
-f –input input path
-o –output output path
-c –compress Compress the output (‘tz’,'bz2′)
-t –indent_tabs Indent with tabs
-s –indent_spaces Indent with spaces
-l –filters Add one or more filters
-d –directory_filters Add a filters directory.
-r –recursive Turn on recursive mode
-? –help Display help / usage

可用Filfter:

Class Description

PHP_Beautifier_Filter_Lowercase

Lowercase: lowercase all control structures.

PHP_Beautifier_Filter_Pear

Filter the code to make it compatible with PEAR Coding Standards

PHP_Beautifier_Filter_Default

Default Filter: Handle all the tokens. Uses K & R style

PHP_Beautifier_Filter_Fluent

Filter Fluent: Create fluent style for multi-level object access.

PHP_Beautifier_Filter_phpBB

Filter the code to make it compatible with phpBB Coding Standards

PHP_Beautifier_Filter_ListClassFunction

Create a list of functions and classes in the script By default, this Filter puts the list at the beggining of the script.

PHP_Beautifier_Filter_EqualsAlign

Filter EqualsAlign: Align the equals symbols in contiguous lines.

PHP_Beautifier_Filter_NewLines

New Lines: Add new lines after o before specific contents The settings are ‘before’ and ‘after’. As value, use a colon separated list of contents or tokens

PHP_Beautifier_Filter_IndentStyles

Filter Indent Styles: Indent the code in k&r, allman, gnu or whitesmiths

PHP_Beautifier_Filter_DocBlock

Filter Doc Blocks: Use DocBlockGenerator for beautify the phpdoc comments.

PHP_Beautifier_Filter_ArrayNested

Filter Array Nested: Indent the array structures Ex.

参考文档:
http://onesandzeros.posterous.com/format-php-code-in-vim-with-phpbeautifier

更多
3 Responses Post a comment
  1. veapon

    厄...又有活折腾了...
    受教了...

  2. 荒野无灯

    gg=G 做的工作只是缩进,缩进风格它是没办法搞定的。PHP_Beautifier能做的工作有很多。

Leave a Reply

Note: You may use basic HTML in your comments. Your email address will not be published.

Subscribe to this comment feed via RSS