Vim 自动生成 Python 导入语句的插件(不使用 Rope)

Vim plugin for automatically generating Python import statements (without using Rope)

我在 here and here 之前看到过类似的问题,但是它们已经 4 年了,没有给出符合我要求的答案。

如果我在 Vim 中输入 Python 代码,例如:

os.path.join('my', 'path')
resp = requests.get('http://example.com')
HttpResponse('success')

假设我的站点包文件夹中有第三方模块 'requests' 和 'django',是否有任何 Vim 插件——它不使用 Rope 库-- 可以自动将相关的导入语句添加到 Python 文件(对于内置和第三方模块,根据需要使用 importfrom),如下所示:

import os
import requests
from django.http import HttpResponse

虽然我传统上会使用古老的 Rope 包,但我一直在用现代替代品替换 Rope 函数以避免 .ropeproject 文件夹的开销。但是,我还没有找到自动导入的 Vim 替代方法。

看看vimpy。从它的描述来看,它可以满足您的需求。

注意需要pyflakes.

我正在使用 python-imports.vim (https://github.com/mgedmin/python-imports.vim)。将它与 gutentags 插件结合起来,它几乎是完美的。完美的解决方案将创建所有导入并在名称冲突的情况下神奇地猜测正确的模块,但我怀疑这是可能的。

更新 2022-05-14:另一种方法是使用 Ale (https://github.com/dense-analysis/ale) with pyright (https://github.com/microsoft/pyright) 和 :ALEImport 命令。

派对来晚了,但既然存在这个问题,我不妨 post 一个新的答案。

我使用 coc-python 来处理这种性质的所有内容。

它就像魔术一样有效:

唯一需要注意的是,您必须按 Ctrl-y 才能接受 Auto-import 建议。

确保您没有 Ctrl-y 在插入模式下映射到任何其他内容(例如,一个名为 Emmet 的常见插件会重新映射此组合。)