【问题标题】:Anaconda's autocomplete function Sublime Text not workingAnaconda 的自动完成功能 Sublime Text 不起作用
【发布时间】:2022-02-13 09:44:18
【问题描述】:

我在 Sublime Text Build 4126 中安装了Anaconda 插件,但它的自动完成功能不起作用。我不知道为什么。 Anaconda 的 linting 确实有效。

Python 版本:3.10

您能帮忙检测并解决问题吗?

【问题讨论】:

  • 你使用的是什么版本的 Sublime?
  • 这是 Build 4126
  • 好的,所以您实际上使用的是 Sublime Text 4。我用新信息更新了您的问题。我需要一点时间来写一个答案,因为您需要遵循几个步骤来修复它,但答案即将到来!
  • 非常感谢!期待答案!

标签: python sublimetext python-3.10 sublimetext4 sublime-anaconda


【解决方案1】:

注意:

自从我写了这个答案后,Anaconda 已经更新以解决这个问题。如果您还没有,只需将您的 Anaconda 安装更新到 v2.3.0 或更高版本。


Anaconda 插件捆绑了其他几个 Python 库,包括 jedi(用于自动完成)、autopep8 用于代码格式化,以及其他几个。这些库是Anaconda 插件本身的一部分,并不作为Package Control dependencies 安装,因此它们的版本不会改变,除非插件作者DamnWidget 手动更新它们。然而,正如他们在最近的 comment 中解释的那样,他们已经有一段时间没有使用 Python 或 Sublime Text,并且维护该插件仅仅是因为它在社区中很受欢迎并且没有其他人加紧维护它。

其中一个包含的库是parso,它使用特定于正在使用的 Python 版本的语法文件来解析 Python 源代码。这个插件恰好是导致您的问题的错误所在。第一个问题是 parso 的包含版本,最后一次更新是在 2020 年 5 月,没有 Python 3.10(或更高版本)的语法文件。 (3.9 的语法文件也与 3.8 的语法文件完全相同,但我们也会修复它。)第二个问题是即使包含 3.10 语法文件,parso 源(因此Anaconda),无法阅读,因此无法自动完成。

我们需要执行几个步骤来解决这两个问题。

  1. 点击 Preferences → Browse Packages… 打开您的 Sublime Text Packages 文件夹。根据您的操作系统以及您是全新安装 ST4 还是从 ST3 升级,此文件夹将位于不同的位置:

    • Linux:~/.config/sublime-text-3/Packages~/.config/sublime-text/Packages
    • macOS/OS X:~/Library/Application Support/Sublime Text 3/Packages~/Library/Application Support/Sublime Text/Packages
    • Windows 常规安装:C:\Users\<b><i>YourUserName</i></b>\AppData\Roaming\Sublime Text 3\PackagesC:\Users\<b><i>YourUserName</i></b>\AppData\Roaming\Sublime Text\Packages
    • Windows 便携式安装:<b><i>InstallationFolder</i></b>\Sublime Text 3\Data\Packages<b><i>InstallationFolder</i></b>\Sublime Text\Data\Packages
  2. 打开命令提示符、Powershell 或终端并导航到临时目录,例如 Windows 上的 C:\Temp 或 macOS 或 Linux 上的 /tmp

  3. 输入:

     git clone https://github.com/davidhalter/parso.git
    

    或者,如果您使用单独的源代码控制 GUI 程序,请使用它来克隆该存储库,例如我提到的临时目录之一。

  4. 进入刚才创建的parso目录,然后进入parso/python目录。您会看到文件中有grammarXX[X].txt 文件,其中XX[X]36 开始,一直到312。在操作系统的文件资源管理器应用程序中打开此文件夹,以便更轻松地进行复制和粘贴。选择所有语法文件并复制它们。

  5. 回到我们之前打开的Packages 窗口,导航到Anaconda/anaconda_lib/parso/python。将复制的语法文件粘贴到此处。您将覆盖其中的一些,但这没关系 - 我们希望这样做。这将解决您遇到的第一个问题。

  6. 向上导航一级,以便您的文件浏览器位置现在为Packages/Anaconda/anaconda_lib/parso。在 Sublime 中打开名为 utils.py 的文件并向下导航到第 123 行。它应该如下所示:

        match = re.match(r'(\d+)(?:\.(\d)(?:\.\d+)?)?$', version)
    

    我们将只添加一个字符。用这个替换原来的行(确保它缩进了 4 个空格):

        match = re.match(r'(\d+)(?:\.(\d+)(?:\.\d+)?)?$', version)
    #                                   ^ added this 
    

    保存文件,大功告成!重新启动 Sublime Text,Anaconda 自动完成功能现在应该可以在 3.10 及更高版本上使用!

请记住,下次升级 Anaconda 时,您的更改将被覆盖,但希望下次发生这种情况时,新版本将修复这些错误。

【讨论】:

  • 非常感谢您的回答!我先安装 Anaconda v2.3.0 看看能不能用!
  • 我已经安装了 Anaconda 的最新版本,不幸的是仍然无法使用自动完成功能:(
  • 我再次升级了 Anaconda,终于可以正常工作了 :)
猜你喜欢
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-02
相关资源
最近更新 更多