Sublime Text 3:自动完成使用不正确的 for 循环语法

Sublime Text 3: Auto-Complete uses incorrect syntax for for loop

使用 sublime text 3,输入 "for" 并点击 Tab 键时的自动完成功能为您提供:

for x in xrange(1,10):
    pass

但是,这不是 python 的有效声明 3. 我已尝试使用以下方法创建新的构建系统:

{
    "cmd": ["c:/Python37/python.exe", "-u", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python"
}

for 的自动完成仍然给出了错误的语法。有什么建议吗?

简短版本是 sublime-buildsublime-snippet 随 Sublime 一起支持 Python 的文件以 Python 版本 2 而不是 Python版本 3。不过,我不知道这是否只是因为它是最初使用的,还是故意这样做的。

在 Sublime 中,资源通常根据语法定义提供的 scope 与特定语言相关。因此,例如 Python 的片段与 source.python 相关联,您的示例构建文件使用该范围来知道它适用于 Python 文件,等等。因此,无论您碰巧使用什么版本,都不会影响所提供的代码段。

例如,如果您使用命令面板中的View Package File命令并输入文本python for snippet,包资源列表将过滤到Python/Snippets/for.sublime-snippet;按 Enter 查看该资源显示:

<snippet>
    <tabTrigger>for</tabTrigger>
    <scope>source.python</scope>
    <description>For Loop</description>
    <content><![CDATA[
for ${1:x} in ${2:xrange(1,10)}:
    ${0:pass}
]]></content>
</snippet>

此处 tabTrigger 指定 如何 代码段插入,scope 控制 插入位置 并且 content控制什么它是插入的。因此,为了将其更改为支持 Python 3,您需要创建自己的代码段或修改现有代码段。

创建您自己的片段的一个问题是它会被添加到片段列表中包括有问题的片段,这允许它在您不这样做时仍可能触发期待它。也没有通用的 "easy" 方法来禁用单个代码段。

因此,通常最好的做法是使用 PackageResourceViewer 包。安装它,从命令选项板 select PackageResourceViewer: Open Resource,然后 select 与上面概述的相同文件并修改代码段的内容(例如将 xrange 替换为 range) 并保存文件。

这将使 Sublime 将现有代码片段替换为您编辑的版本,以便它取代现有代码片段并按您想要的方式工作。