在 Vim 中(重新)格式化 PHP 代码

Posted

技术标签:

【中文标题】在 Vim 中(重新)格式化 PHP 代码【英文标题】:(Re)formatting PHP code in Vim 【发布时间】:2012-04-24 12:19:32 【问题描述】:

如何格式化看起来像这样的 php 代码

class SomeClass

    function insideclass()
    


    
 

到这里,不用任何外部工具就使用 Vim?

class SomeClass 
    function insideclass() 


    
 

我并不是说这是格式化代码的最佳方式,但这是我们团队所遵循的。

编辑:删除了对 sn-p 插件的引用,这导致了对问题的一些混淆。

【问题讨论】:

【参考方案1】:

你有两个不相关的问题,你不会找到唯一的解决方案。

    你不喜欢默认的classsn-p。

    没问题。如果它不存在,请创建~/.vim/snippets/php.snippets 并按照其他答案对其进行自定义以适应您团队的规则。 Snipmate 不够聪明,无法适应你的编码风格。

    您现有的一些代码不符合您的编码规则。

    Snipmate 根本没有帮助,因为它只处理插入,而不是转换。您将需要一些外部 beautifier 或一些宏。

    编辑

    这是一个非常简单的命令,它完全符合您的要求在您的示例中。我不保证它适用于任何地方的一切。把它当作一个天真的起点。

    :g/^\s*\s*$/normal kJ
    

    :g/pattern 作用于所有包含pattern 的行,参见:h :global

    ^\s*\s*$ 匹配所有单个 ,无论它们与行首之间有多少空格。

    normal 执行normal 命令,见:h :normal

    kJ 上升一行,Joins 这一行与匹配的行。

    完成。

    ENDEDIT

【讨论】:

其实我的问题更多是针对第二个问题。我只是以 snipate 插件为例。我的错。我现在已经编辑了这个问题以澄清它。 第二个问题除了使用美化器之外,有没有基于Vim的解决方案? 我不知道没有交钥匙解决方案。也许有人写了一个基于 PHP_Beautifier 的脚本?我不知道。它看起来像是宏和替换的典型用例。 +1。我知道kJ 是最简单的解决方案,但我知道如何在找到匹配项时执行它。谢谢! 哇!!这正是我想要的。简单而优雅。我将把它映射到我的 .vimrc 中易于记忆的键。【参考方案2】:

为什么不修改那个插件的源代码?

例如,改变这些:

snippet class
    /**
     * $1
     */
    class $2:ClassName
    
        $3
        function $4:__construct($5:argument)
        
            $6:// code...
        
    

snippet class
    /**
     * $1
     */
    class $2:ClassName
        $3
        function $4:__construct($5:argument)
            $6:// code...
        
    

【讨论】:

是的,修改插件绝对是一种选择。我只是想看看是否可以将代码从一种风格转换为另一种风格。【参考方案3】:

所有 snipmate sn-ps 都存储在一个目录中。转到该目录并编辑所需的文件。

目录存储在 vim 目录中,名为snippets。在那里你会看到一个php.snippets 文件。转到该文件,在第 70 行,您可以编辑该类的 sn-p。

【讨论】:

以上是关于在 Vim 中(重新)格式化 PHP 代码的主要内容,如果未能解决你的问题,请参考以下文章

在 vim 中重新格式化以获得漂亮的列布局

vim 如何重新格式化 `gq` 避免触及 TeX 逐字部分?

如何在 Sublime Text 3 中正确格式化/缩进 HTML 和 PHP 代码

是否有任何免费的命令行脚本可以重新格式化 PHP 源代码?

vim 格式代码编码问题?

在 Vim 中格式化 Ruby 代码