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


(Re)formatting PHP code in Vim

如何格式化如下所示的PHP代码

class SomeClass
{
    function insideclass()
    {

    }
} 

进入这个,在没有任何外部工具的情况下使用 Vim?

class SomeClass {
    function insideclass() {

    }
} 

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

编辑:删除了对代码段插件的引用,这引起了对该问题的一些混淆。

您有两个不相关的问题,并且找不到针对这两个问题的唯一解决方案。

  1. 您不喜欢默认的class代码段。

    没关系。如果尚不存在,请创建~/.vim/snippets/php.snippets并通过遵循其他答案对其进行自定义以适合团队的规则。Snipmate 不够聪明,无法适应您的编码风格。

  2. 某些现有代码不符合编码规则。

    Snipmate 根本无济于事,因为它只处理插入,而不是转换。您将需要一些外部美化器或一些宏。

    编辑

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

    :g/^'s*{'s*$/normal kJ
    
    • :g/pattern作用于所有包含pattern的行,请参见:h :global

    • ^'s*{'s*$匹配所有单个{,无论它们与行首之间的空格量如何。

    • normal执行normal命令,请参阅:h :normal

    • kJ上升一行,并将这条线与匹配的线J

    • 做。

    结束了

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

例如,更改以下内容:

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...}
        }
    }

Snipmate 片段存储在一个目录中。转到该目录并编辑所需的文件。

direcorty 存储在 vim 目录中并称为 snippets 。在那里你会看到一个php.snippets文件。转到该文件,在第 70 行,您可以编辑类的代码段。