【问题标题】:Enable completions-popup in Sublime Text 3在 Sublime Text 3 中启用完成弹出窗口
【发布时间】:2016-09-27 12:50:47
【问题描述】:

与大多数其他软件包不同,PHP 抑制了完成/sn-ps-popup,迫使您在点击选项卡之前键入整个触发器,并且无法在具有相同触发器的不同 sn-ps 之间进行选择。

我正在寻找一种在 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 指出的那样,弹出窗口在 &lt;?php ?&gt; 内工作,问题发生在 PHP 文件中,但在 php.ini 文件之外。范围是(embedding.php,text.html.basic)。

【问题讨论】:

  • 我无法重现您的问题,并且 cancelCompletion 键的值相同。步骤: [1] 打开新文件并设置 PHP 语法 [2] 插入基本 PHP 模板:&lt;!DOCTYPEhtml&gt;&lt;html&gt;&lt;body&gt;&lt;?php __PHP_CONTENT__ ?&gt;&lt;/body&gt;&lt;/html&gt; [3] 在 __PHP_CONTENT__ 区域测试自动完成。自动完成按预期工作。
  • 我现在正在使用 laravel,所以我什至没有想过用 进行测试。它在这些内部工作,所以感谢您的输入。但是,我仍然试图让它在这些之外工作,尤其是。刀片模板;范围(embedding.php、text.html.basic)。如果键入准确,PHP 和 Laravel Snippets 都可以工作,因此适用范围,并且 Laravel Snippets 包甚至没有 .tmPreferences 来覆盖 PHP 的。有什么想法吗?
  • 我尝试更改范围@Completion Rules.tmPreferencesPHP.sublime-completions,但运气不佳。很奇怪——如果我把它改成source.python,它就会停止运行@PHP 文件,并且会正常运行@Python 文件。但是,我尝试了source.phpembedding.php,&text.html.basic的一堆组合;而且它们似乎都不适用于您的预期用例。 @KeithHall 可能知道一个解决方案,他在与范围相关的问题上要好得多。
  • @Enteleform 不幸的是,您无法 ping 其他 SO 成员,除非他们已经与帖子相关联 - 撰写、编辑、评论。我肯定会在主题行中打开一个问题(你们中的任何一个)here[PHP],解释正在发生的一切。 embedding.php 必须是新范围,但我不知道它是基本范围还是什么。 Keith 或 wbond 应该能够对此有所了解。

标签: autocomplete sublimetext3 sublime-text-plugin


【解决方案1】:

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

现在,HTML 语法定义仅在&lt; 后面至少有一个字符时才分配meta.tag 范围。即输入&lt;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

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

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

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

【讨论】:

  • 非常感谢。我选择了 "meta.tag - punctuation.definition.tag.begin, source - comment - string.quoted.double.block - string.quoted.single.block - string.unquoted.heredoc, embedding.php - comment - string.quoted.double.block - string.quoted.single.block - string.unquoted.heredoc",它模仿了旧的异常,并且看起来足够具体,不会与未来的更新发生冲突。
猜你喜欢
  • 2021-09-24
  • 1970-01-01
  • 2012-09-21
  • 2019-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
  • 1970-01-01
相关资源
最近更新 更多