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

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

class SomeClass
{
    function insideclass()
    {


    }
} 

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

class SomeClass {
    function insideclass() {


    }
} 

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

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

【问题讨论】:

    标签: php vim code-formatting macvim


    【解决方案1】:

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

    1. 你不喜欢默认的classsn-p。

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

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

      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。

    【讨论】:

      猜你喜欢
      • 2010-10-25
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 2020-04-09
      • 1970-01-01
      • 2014-01-07
      相关资源
      最近更新 更多