首页 > 解决方案 > Sublime Text 3:自动完成对 for 循环使用了不正确的语法

问题描述

使用 sublime text 3,键入“for”并点击选项卡时的自动完成功能为您提供:

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 的自动完成仍然给出错误的语法。有什么建议吗?

标签: autocompletesublimetext3

解决方案


简短的版本是 Sublime 附带的支持 Python 的文件sublime-buildsublime-snippet文件以 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,您需要创建自己的代码段或修改现有代码段。

创建您自己的片段的一个问题是,它将被添加到片段列表中,包括有问题的片段,这使得它可能在您不期望它时仍然触发。也没有通用的“简单”方法来禁用单个片段。

因此,通常最好的做法是使用PackageResourceViewer包。安装它,PackageResourceViewer: Open Resource从命令面板中选择,然后选择与上述相同的文件并修改片段的内容(例如替换xrangerange)并保存文件。

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


推荐阅读