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

时间:2016-05-29 17:44:53

标签: autocomplete sublimetext3 sublime-text-plugin

与大多数其他软件包不同,PHP会抑制完成/片段 - 弹出窗口,强制您在单击选项卡之前键入整个触发器,并且无法在具有相同触发器的不同片段之间进行选择。

我正在寻找一种方法来启用PHP中的完成 - 弹出窗口(或覆盖所有语言,覆盖其默认值)。

我尝试过的事情:

PHP包包含文件"完成规则.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)。

1 个答案:

答案 0 :(得分:2)

默认情况下,当您键入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 - &gt; Settings - User档案。

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