【发布时间】:2014-09-25 22:14:28
【问题描述】:
当光标在单引号或双引号内时,有什么方法可以禁用 Sublime Text 3 触发代码完成:
这似乎是毫无意义的行为,而且有点烦人。
我正在使用最新的稳定版 (3065) Sublime Text 3,带有 PHP Completions Kit 插件,如果这很重要的话。
【问题讨论】:
标签: sublimetext sublimetext3 code-completion
当光标在单引号或双引号内时,有什么方法可以禁用 Sublime Text 3 触发代码完成:
这似乎是毫无意义的行为,而且有点烦人。
我正在使用最新的稳定版 (3065) Sublime Text 3,带有 PHP Completions Kit 插件,如果这很重要的话。
【问题讨论】:
标签: sublimetext sublimetext3 code-completion
所以事实证明你的 PHP Completions Kit 插件可能是罪魁祸首。如果您愿意,我forked the code on Github。
您可以通过创建 JSON 格式的 .sublime-completions 文件来填充 Sublime 中的自动完成下拉菜单。本质上,它是一长串带有关联触发器的 sn-ps,其名称显示在下拉列表中,并根据您键入的内容通过模糊搜索方法进行匹配。补全都是scoped,因此它们只会出现在您的代码的所需部分:例如,当您尝试定义一个类时,您不希望出现标准函数名称等。
回到插件。对于几个完成文件,范围是使用负选择器构建的:从source.php(所有 PHP 代码的基本范围)开始,并减去不需要的范围。一旦被 Sublime 分析,完成将出现在任何地方,除非它们被明确拒绝。一个例子,来自function.sublime-completions:
"scope": "source.php - variable.other - meta.function.arguments - support.class - entity.other.inherited-class - meta.use - meta.catch - comment.block.documentation.phpdoc"
所以这些都是作者不希望这些补全出现的地方。不幸的是,在这几个文件中,他/她忘记包含string 范围,因此当您输入字符串时会出现补全,这显然是不受欢迎的行为。幸运的是,修复很简单:检查所有完成文件,检查否定选择器的范围,然后在它们的末尾添加- string。现在,它们仍然可以像以前一样工作,只是完成不会显示在任何类型的字符串中。
就像我在顶部所说的那样,我对项目here 进行了分叉,并进行了必要的更正。我还提交了pull request,所以我们将看看它是否/何时被主代码库接受。同时,请随意将我的 repo 克隆到您的 Packages 目录中:
点击Preferences -> Browse Packages...打开您的Packages目录。通过命令行进入该目录,然后运行
git clone https://github.com/MattDMo/sublime-phpck.git "PHP Completions Kit"
这会将 repo 克隆到名为 PHP Completions Kit 的文件夹中,覆盖由 Package Control 安装的文件夹。密切关注插件的Package Control page,当你看到Modified 字段从2014-09-05(如果你将鼠标悬停在文本3 weeks ago 上,它在工具提示中)更改为最近的某个时间,检查repo 看看是否这是我的合并请求并发布了一个新版本,然后您可以随意删除 Packages 中的新文件夹并坚持使用 Package Control 版本,因为我不会让我的 repo 保持最新- 对包进行任何新修改的日期。
我的拉取请求已合并,包控制已更新。
【讨论】:
"auto_complete_selector": source - comment - string, meta.tag - punctuation.definition.tag.begin"。这应该可以解决问题。