【问题标题】:Annoying sublime text autocompletion for Python after period (`self` keyword)Python 在句点后烦人的崇高文本自动完成(`self`关键字)
【发布时间】:2016-08-24 18:08:46
【问题描述】:

我正在使用 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. 行为来自哪里?如何禁用%%! 的东西?

【问题讨论】:

    标签: python autocomplete sublimetext3 sublimerepl


    【解决方案1】:

    我自己也遇到过这个问题,不好追。

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

    问题:

    问题的原因是 Sublime Text 3 附带的默认 Python sn-p 称为 self.sublime-snippet,如下所示:

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

    在Sublime text 2中,这个文件可以简单的删除,但是ST3中默认的sn-ps存储方式不一样,所以没有办法轻易删除这个文件。

    解决办法:

    This stack overflow answer 解释了如何提取一种语言的包信息,在本例中是 Python。然后可以照常删除 sn-p。

    更新:

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

    【讨论】:

    • 非常感谢!我使用 PackageResourceViewer 找到了这个片段,然后在片段的第二行用. 替换了self.。现在tab键上会弹出自动补全,但是没有插入烦人的“self”字!
    • 完美!很高兴听到 :) 如果需要,您也可以删除整个 self.sublime-snippet-文件,因此工具提示不会显示选择该 sn-p 的选项。
    • 由于某种原因,如果我简单地删除剪辑,自动完成功能就会停止工作 - 所以我把它留在那里,但改变了。
    • 是的,如果删除了 sn-p,您可能必须强制在 . 上打开建议框。如果您使用 Anconda(我相信您会这样做),您可以通过以下方法做到这一点:damnwidget.github.io/anaconda/IDE/#toc_3
    【解决方案2】:

    我强烈建议您摆脱其他完成包并安装Anaconda(与 Anaconda Python 发行版无关)。我已经使用它几年了,我非常喜欢它。基本上,设置它所需要做的就是在 Anaconda 的设置或 project 的设置中为 "python_interpreter" 提供路径,它就可以工作。无需永远为 SublimeCodeIntel 之类的所有内容建立索引,如果您不想这样做,也无需设置单独的 linter,因为内置了几个 linter。 Virtualenvs 是无缝的。 Anaconda 会看到"python_interpreter" 指定的Python 版本可用的所有模块,因此您无需担心通过设置添加额外的环境路径。确保将所有默认设置文件复制到用户设置文件中,然后根据需要更改选项。项目特定设置会覆盖用户设置,因此您可以通过编辑项目进行更多自定义。

    顺便说一句,我与该项目没有任何关系,除了一两个小的拉取请求,我只是一个非常满意的用户。

    【讨论】:

    • Anaconda 太棒了!奇迹般有效!非常感谢您的提示!
    • @MattDMo:有什么理由编辑我的答案吗?您删除的那句话不是为了获得声誉积分,而是为了让其他有同样问题的人找到问题的解决方案!就目前而言,您的回答根本没有回答问题。
    • @mart0903 我的解决方案非常适合我,显然也适用于 OP,所以它确实回答了这个问题。它可能对您不起作用,非常欢迎您提交自己的答案,但这不是拒绝我的理由。我从您的答案中删除的那句话 - Please consider accepting this answer, as it solves the problem and might be useful for future users. 既不恰当又多余。 每个关于 SO 的回答都希望能解决问题,并希望对其他读者有用 - 这就是回答的重点。
    • @MattDMo:我同意这句话是多余的,好的。不过有一点:来自stackoverflow.com/help/how-to-answer:“仔细阅读问题。具体来说,问题是什么?确保你的答案提供了这一点——或者一个可行的替代方案。”在您的情况下,当问题是“如何在 javascript 中添加两个数字”时,您的回答是典型的“jQuery 有一个不错的插件!”。我不同意 Anaconda 是一种可行的替代方案。无论如何,让我们解决这个问题,并在未来更好地合作。 - 马丁
    猜你喜欢
    • 2014-02-07
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    相关资源
    最近更新 更多