[英]Autocomplete for gtk3 and pygobject
我正在寻找一种将 gtk3 库的自动完成功能添加到 vim 的可能性。 我已经尝试过 vim-jedi,因为它似乎是 vim 和 python 的最先进的自动完成机制( 这里也推荐),但这不适用于从 gi.repository 导入的 gtk3 东西
from gi.repository import Gtk, GdkPixbuf, Gdk, GObject
我查看了 gi.repository 站点包。 在那之后,我对绝地不能自省 Gtk 模块的方法并不感到惊讶,因为这些模块在那里生成了很多魔法;-)
此外,像PyCharm这样的其他“真实”IDE 也不支持以这种方式导入的模块的补全(我尝试了社区版,但我敢打赌专业版也不支持)。
有谁知道如何将自动完成添加到 vim(首选解决方案)或其他编辑器/IDE?
GObject,Gtk 模块包含相当多的方法/类,记住你需要的一切并不容易。 此外,似乎只有 gtk3 的 C api 的文档,其中方法名称并不总是与 python api 中的相同......
Neocomplcache / Neocomplete能够完成自省的 GObject 库,但如果您自己没有针对 GTK+ 3 编译 Vim,这很可能会崩溃。在 Ubuntu 14.04 上,Vim 是针对 GTK+ 2 编译的,尝试导入和自动完成 GTK+ 3 库将失败,因为两个工具包不能同时运行。
我最近找到了一个使用fakegir的解决方案。 它根据 gir 文件中的信息(例如: /usr/share/gir-1.0/*.gir
)构建一个虚假的 Python 包。 这可以为您的 LSP 提供 Gtk 自动完成功能。
他们的指示很简单:
./fakegir.py
生成假包到~/.cache/fakegir/
mkvirtualenv fakegir
或类似的)cdvirtualenv fakegir
)./lib/python*/site-packages
目录cp -a ~/.cache/fakegir/gi .
在 vim 中编辑程序之前必须激活 virtualenv。 当您安装新的 gir 文件或升级时,也必须重新生成假包。 我在 neovim v0.8.0-dev 中使用python-lsp-server (pylsp) 对此进行了测试,并怀疑它适用于其他语言服务器。
我还遇到了mypy
提供的stubgen工具,它可能对在其他情况下生成类型提示/签名很有用。
Jedi 和 PyCharm 都支持PEP 484 .pyi 类型的存根。 您可以使用 PyGObject-stubs 库将 PyGObject 的这些类型注释存根添加到编辑器中:
python3 -m venv .venv
source .venv/bin/activate
pip install PyGObject-stubs
Jedi 和 PyCharm 都应该自动拾取它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.