【问题标题】:How can I get emacs to indent html chunks between php control constructs?如何让 emacs 在 php 控件结构之间缩进 html 块?
【发布时间】:2012-08-22 11:16:52
【问题描述】:

我已经尝试了所有我能找到的 php/html 模式(包括 nxHTML),但找不到一种能够按照我想要的方式缩进的模式。这是我的文件包含的示例:

<?php if (a == 5): ?>
<span>test</span>
<?php endif; ?>

我希望 emacs 缩进将 if/endif 视为元素的代码,如下所示:

<?php if (a == 5): ?>
  <span>test</span>
<?php endif; ?>

for 循环和其他结构也是如此。 谢谢。

【问题讨论】:

    标签: php html emacs mode indentation


    【解决方案1】:

    您可能不得不自己动手。如果您只想确保像 &lt;?php if ....: ?&gt; 这样的块开始缩进,并且 &lt;?php endif; ?&gt; 停止该级别的缩进,这取决于您的 elisp 技能,这可能并不难。您甚至可以构建一个从 nxml 模式派生的新模式,并以这种方式修改缩进。

    不管它的价值如何,试图让它在 nxHTML 中工作可能是一场彻底的灾难。主要是因为您会尝试跨模式边界缩进。

    好消息是您可能可以使用正则表达式来处理所有 PHP 愚蠢的替代语法。坏消息是... PHP 愚蠢的替代语法!

    【讨论】:

      【解决方案2】:

      我已经编写了主要模式 web-mode.el(可在 http://web-mode.org 上找到)。此模式专为包含 CSS/JS/PHP/JSP 的 HTML 模板而设计。它根据块的类型缩进和合成颜色。 HTML 缩进非常健壮(标签和属性的缩进)。

      【讨论】:

      • 感谢您的回复。我已经尝试过您的模式,它似乎在正确的轨道上,但仍然没有保留足够的信息来知道您何时嵌套在 PHP 控制结构中。例如,在 foreach 循环中嵌套(但不在同一个 php 块中)的 PHP if 语句不会缩进,它假定 if 语句不在任何内容中。
      • @user1628932 你能给我一个例子(缩进你想要的方式)吗? (我的邮箱在web-mode.org结尾)
      • 网络模式正是我所需要的。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多