在 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
)可能是值得的,以防不同的值会对您的体验产生负面影响。
与大多数其他包不同,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
)可能是值得的,以防不同的值会对您的体验产生负面影响。