一段时间之后恼人的sublime文本autocompletion for Python(`self` keyword)

时间:2016-04-29 14:19:11

标签: python autocomplete sublimetext3 sublimerepl

我正在使用sublime text 3进行python开发。当我输入时,我打开了自动完成功能。我希望,当我键入一个对象名后跟一个句点时,会弹出一个对象的方法/属性列表。它没有发生,所以我按Tab

import time
time.[TAB]

现在发生的事情,绝对是奇怪的! .替换为self.,因此我最终会使用

import time
timeself.

我查看了所有设置文件,我尝试了包python completionscode intelcode complice,但没有一个禁用此“功能”,这让我发疯了!

最后,我找到了Jedi包,它解决了文本编辑器的这个问题。但是我仍然在解释器窗口(包SublimeREPL)中遇到问题。顺便说一句,如果我同时安装Jedicode complice,则REPL中的自动完成似乎效果更好,但它会提供一些不相关的废话,例如%%!%%HTML。是的,如果我按[TAB]两次,我仍然会以timeself.而不是time.结束!

有谁知道发生了什么事?这个. - > self.行为来自何方?如何禁用%%!内容?

2 个答案:

答案 0 :(得分:5)

我自己遇到了这个问题,追踪并不容易。

问题不是由任何包引起的。我在运行默认构建的Sublime文本3后发现了。虽然我强烈推荐使用Anaconda(如MattDMo所述),但安装Anaconda时也会出现问题。

问题:

问题的原因是Sublime Text 3附带的名为self.sublime-snippet的默认Python代码段,如下所示:

<snippet>
    <content><![CDATA[self.]]></content>
    <tabTrigger>.</tabTrigger>
    <scope>source.python</scope>
    <description>self</description>
</snippet>

在Sublime文本2中,可以简单地删除此文件,但ST3中的默认代码段不会以相同的方式存储,因此无法轻松删除此文件。

解决方案:

This stack overflow answer解释了如何提取语言的包信息,在本例中为Python。然后可以正常删除该代码段。

<强>更新

由于此问题,现在已在源代码中删除了代码段。可能包含在下一次更新中。资料来源:https://github.com/sublimehq/Packages/issues/473

答案 1 :(得分:3)

我强烈建议您删除其他完成包并安装https://plnkr.co/edit/S8DJpHFVNFioklTl1xg6?p=preview(与Anaconda Python发行版无关)。我已经使用它几年了,我非常喜欢它。基本上,您只需要设置它就可以在Anaconda的设置或Anaconda的设置中为"python_interpreter"提供路径,它只是有效。不要永远索引像SublimeCodeIntel这样的所有东西,如果你不想要,也不需要设置一个单独的linter,因为内置了几个linters。 Virtualenvs是无缝的。 Anaconda将看到"python_interpreter"指定的Python版本可用的所有模块,因此您无需担心通过设置向环境添加额外路径。确保将所有默认设置文件复制到用户设置文件中,然后根据需要更改选项。特定于项目的设置会覆盖用户设置,因此您可以通过编辑项目来进行更多自定义。

顺便说一下,我不是以任何方式加入该项目,除了一个或两个小的拉取请求,我只是一个非常满意的用户。