autocomplete - 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 的自动完成仍然给出错误的语法。有什么建议吗?
解决方案
简短的版本是 Sublime 附带的支持 Python 的文件sublime-build
和sublime-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
从命令面板中选择,然后选择与上述相同的文件并修改片段的内容(例如替换xrange
为range
)并保存文件。
这将使 Sublime 用您编辑的版本替换现有的片段,以便它取代现有的片段并按照您想要的方式工作。
推荐阅读
- performance - 如何确定Jetty中每个用户的线程数
- python - 求解同时的线性和非线性方程和不等式
- google-api - 是否有从 G-Suite Basics 中提取帐单/付款数据的 API?
- sicstus-prolog - 如何在 Windows 上安装 Berkeley DB for SICstus?
- google-sheets - Google表格 - 如何根据同一行中另一列的值计算一列
- python-3.x - 检查 TextChannel 的 id 并执行一些操作
- php - 无法加载动态库“pdo_mysql.so”,因为将 php 版本升级到 7.4
- performance - 如何使用 TruClient 协议捕获响应?
- c - 带有 ncurses 的 C99 UTF8 字符
- c# - 如何创建页面上的每个方法都可以访问的 DataTable 变量?