如何在 PHP 或 HTML 文件之间指定片段的范围?

How to specify the scope of a snippet between a PHP or a HTML file?

似乎在检查 PHP 文件的范围时,其扩展名为 .php,并且其语法被正确识别为 PHP,Sublime 仍会将其报告为 text.html.basic(等等)。这使我的 HTML 片段始终在其中执行。

因为我想要制作一个片段 todo 作为它的 tabTrigger,插入一个注释掉的标签,显然我需要它对于不同的文件类型是不同的(<!-- -->/* */)。但是这样,<!-- --> 注释被插入到 PHP 文件中...

我是否遗漏了额外的细节,或者这是一个错误?

Sublime Text 中的 PHP 语法是 HTML 语法的扩展,意味着所有 HTML 在 .php 文件中有效,加上额外的 <?php … ?> 标签。如果您的光标位于 .php 文件中,但在 <?php 标记之外,则范围将为 embedding.php text.html.basic 并且注释应采用 <!-- … --> HTML 形式。

进入 PHP 标签后,您现在拥有 source.php 的额外范围。评论现在应该使用 PHP 评论 /* … */ and/or // ….

对于您的代码段,只需将范围设置为 source.php,它应该只在实际 PHP 代码内触发。

如果您希望您的代码段仅在 HTML 中触发,而 而不是 在 PHP 中触发,请将源设置为 text.html.basic -source.php

注意 这在最新版本的 Sublime Text 3(3.2.2,Build 3211)中都是正确的。 PHP 语法在早期完全重构,因此这可能无法在早期版本中正常工作。如果您还没有升级,现在是个好时机!

在您的 PHP 标签内,您需要使用 source.php,而在标签外则是 text.html.php。您可能想要这样的东西:

PHP

<snippet>
  <content><![CDATA[/* TODO  */]]></content>
  <tabTrigger>todo</tabTrigger>
  <scope>source.php</scope>
</snippet>

HTML (PHP)

<snippet>
  <content><![CDATA[<!-- TODO  -->]]></content>
  <tabTrigger>todo</tabTrigger>
  <scope>text.html.php</scope>
</snippet>