在 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】:你有两个不相关的问题,你不会找到唯一的解决方案。
你不喜欢默认的class
sn-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
上升一行,J
oins 这一行与匹配的行。
完成。
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 如何重新格式化 `gq` 避免触及 TeX 逐字部分?