在Vim中格式化PHP代码

35
我目前在使用 Vim 作为轻量级的 IDE 。我安装了 NERDTree、bufexplorer、supertab 和 ctags 插件来实现几乎所有我想要的功能。唯一缺少的是自动代码格式化。
我正在处理一些混乱的 PHP 代码,它们的缩进和代码格式不一致,理想情况下,我可以突出显示要格式化的代码(整个文件也可以)并运行命令来对其进行整理。
是否有任何适用于在 Vim 中工作的好的解决方案?

我喜欢Wesley Mason使用“shift-v”后跟“=”的想法。我将“shift-v”和“=”的键序列记录到宏中。然后,我可以调用该宏多次以格式化多行代码。 - user975144
5个回答

78

在vim中快速修复PHP缩进的方法是使用shift-v选择要处理的行,然后按下等号(=)触发自动格式化。

至于其他格式问题,您可能需要使用一些正则表达式搜索和替换,例如使用:%s/^M/\r/g(这是ctrl-Vctrl-m,而不是caret-M)来修复行尾。


2
我简直不敢相信我以前不知道等于自动格式化,那真的非常有用。对于格式问题,我可以构建一些自定义正则表达式,我猜希望别人已经做过(并测试)它。 - gacrux
12
小贴士:ggvG= 可以选择文件中的每一行并自动格式化。 - Whaledawg
19
鲸鱼狗。你甚至可以仅输入 gg=G 来节省一个字符。值得记住的是,在vim中,你可以对大部分命令进行操作和移动。 - michael
哇!简单而强大! - zx1986
更好的是,我刚刚发现=ip可以直接缩进段落(= 表示缩进,i表示内部,p表示段落)。 - Pascal Luxain
显示剩余3条评论

16

进入vim的正常模式,然后键入:

1GVG=

3
1G - 跳转到第一行; V - 进入可视化模式; G - 跳转到文件末尾; = - 自动格式化选中的代码; - wormhit
13
gg=G 稍微容易一些(少了大写锁定键)。 - puk
5
实际上,该命令会触发缩进脚本中的功能。它只会重新缩进代码,而不是完全重新格式化。 - chtenb
我会使用 ggvG=,它们是相同的东西。 - Randy Lam
gg: 将光标移动到第N行,默认为第一行 - ako

10

以PSR-2风格格式化

遵循编码规范指南PSR-2,使用PHP-CS-Fixer

这里有一个Vim插件:Vim-php-cs-fixer

安装方式:

安装PHP-CS-Fixer(使用Composer全局安装):

composer global require friendsofphp/php-cs-fixer

然后添加 Vim 插件 (Pathogen):

cd ~/.vim/bundle
git clone git@github.com:stephpy/vim-php-cs-fixer.git

重新启动 Vim。

默认映射:

<leader>pcd " For directory
<leader>pcf " For flie

2
为了在文件保存后自动运行 php-cs-fixer,请在 ~/.vimrc 中添加以下行:autocmd BufWritePost *.php call PhpCsFixerFixFile() - Jun Hsieh
我收到了错误信息 E117: 未知函数:php_cs_fixer#fix - Mahdi mehrabi
@Mahdimehrabi 我也是,有什么进展吗? - ODelibalta

8
有一个vim插件可以使您在vim内对代码进行格式化。它叫做vim-autoformat,您可以在此处阅读有关它的信息并下载它:https://github.com/vim-autoformat/vim-autoformat
它将外部代码格式化程序集成到vim中。安装此插件后,您只需要安装外部代码格式化程序即可让所有内容都能正常工作。它支持php格式化程序phpCB,这是我目前为止见过的最好的php格式化程序。 更新:由于代码破坏行为,不再支持phpCB。但是,vim的缩进文件始终作为备选方案使用,允许您在没有可用格式化程序时至少缩进代码。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接