在 Sublime Text 3 中启用完成弹出窗口

Enable completions-popup in Sublime Text 3

与大多数其他包不同,PHP 抑制了 completions/snippets-popup,迫使您在点击 Tab 之前键入整个触发器,并且无法在具有相同触发器的不同片段之间进行选择。

我正在寻找一种在 PHP 中启用完成弹出窗口的方法(或对于所有语言,覆盖它们的默认设置)。

我试过的:

PHP 软件包包含文件 "Completion Rules.tmPreferences" 和

<key>cancelCompletion</key>
<string>^\s*(\}?\s*(else|do|try)|(class|function)\s*[a-zA-Z_0-9]+)$</string>

Afaik,这就是抑制弹出窗口的原因。我将正则表达式更改为无法匹配的选择器

<key>cancelCompletion</key>
<string>/(?!)/</string>

并使用 PackageResourceViewer 保存它,以便它应该覆盖默认设置文件,但是,即使在文件只加载一次的情况下重新启动,弹出窗口仍然不会出现。

编辑:

正如 Enteleform 指出的那样,弹出窗口在 <?php ?> 内部工作,问题出现在 PHP 文件中,但在 php 外部。范围是 (embedding.php, text.html.basic).

默认情况下,当您键入 HTML 时,自动完成不会自动显示,正如您所经历的那样。这由 auto_complete_selector 首选项控制,默认为以下选择器:"meta.tag - punctuation.definition.tag.begin, source - comment - string.quoted.double.block - string.quoted.single.block - string.unquoted.heredoc"。如您所见,它在 source 范围内启用(注释和字符串内部除外),这就是它在 PHP 和 meta.tag 范围内工作的原因。

现在,HTML 语法定义仅在 < 后至少有一个字符时分配 meta.tag 范围。即输入 <d 将自动显示自动完成列表。

要将其更改为始终显示 HTML 次完成,您可以将首选项更改为 "text.html, source - comment - string.quoted.double.block - string.quoted.single.block - string.unquoted.heredoc" -即将 meta.tag - punctuation.definition.tag.begin 更改为 text.html

或者,要在您输入任何语言时始终显示完成,您可以将首选项更改为空字符串 ""。但是,我建议保留不在字符串和注释中显示自动完成的功能,并使用 "- comment - string.quoted.double.block - string.quoted.single.block - string.unquoted.heredoc" 代替。还值得注意的是,键入单词分隔符不会自动触发自动完成 - 您必须键入可以自动完成的内容的首字母。

此首选项应添加到您的 Preferences -> Settings - User 文件中。

注意:当您覆盖默认首选项时,默认值可能会在未来的 ST3 版本中更改。因此,偶尔检查默认值(从 Preferences -> Settings - Default)可能是值得的,以防不同的值会对您的体验产生负面影响。