繁体   English   中英

gtk3 和 pygobject 的自动完成

[英]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/
  • 创建一个 virtualenv ( mkvirtualenv fakegir或类似的)
  • 进入 virtualenv 目录( cdvirtualenv fakegir
  • 进入./lib/python*/site-packages目录
  • 将包复制到 virtualenv 中: 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM