【问题标题】:Is it possible to insert import statements with jedi-vim?是否可以使用 jedi-vim 插入导入语句?
【发布时间】:2026-01-23 16:15:02
【问题描述】:

我刚刚开始研究 Vim jedi 插件,它看起来相当令人印象深刻。我使用的一些 Java IDE 的一个特性是能够自动添加所需的导入。绝地能做到吗?例如,如果我输入一行如

arg1 = sys.argv[1]

然后调用一些绝地命令,插件是否可以在源文件顶部自动插入import sys 行(如果尚未导入 sys)?

我查看了绝地帮助,但没有看到类似的东西 - 但我可能错过了一些东西。或者,是否有另一个 Vim 插件可以做到这一点? (它需要对 Python 语法有一定程度的理解才能使其正确,这就是为什么我希望 Jedi 能够做到这一点)。

【问题讨论】:

    标签: python vim jedi-vim


    【解决方案1】:

    目前 Jedi 不进行重构。这包括进口添加。整个主题都有一个问题:https://github.com/davidhalter/jedi/issues/667

    要以良好的性能实现此命令并不容易。然而,任何帮助表示赞赏。 :)

    【讨论】:

      【解决方案2】:

      FIY,我在lh-dev 中定义了一个可以按需使用的通用导入功能。我在我的 C&C++ 套件和 snippet engine (mu-template) 中使用它。

      到目前为止,我没有解析任何内容来添加缺少的导入/包含语句。正如戴夫所说,这部分会很复杂。相反,我的 sn-ps 知道哪些文件需要导入/包含,如果尚未导入/包含,则导入/包含它们。

      它远非完美,但它是一个开始。 mu-template 在 sn-p 展开后提供了一个挂钩来在文件的开头做一些事情,这就是我调用 lh-dev 函数的地方。如果其他 sn-p 引擎提供类似的钩子,您应该可以从您的 sn-ps 调用lh#dev#import#add()

      这里是 Python 的 sn-p 概念证明(我很少用 Python 编程,也没有太多的 sn-ps):https://github.com/LucHermitte/mu-template/blob/master/after/template/python/path-exists.template

      【讨论】: