Omni 补全i_CTRL-X_CTRL-O 无需安装插件即可在 Vim 中工作,但前提是您满足以下三个条件:
- Vim 用
+python3 编译
- Python3 已安装
- 对于您想要全方位完成的 Python 包:
- 软件包已安装
- 您正在编辑的脚本有一个用于 Python 包的
import 语句
- 如果输入
import numpy as np,则在输入np. 后,您正在输入i_CTRL-X_CTRL-O,而不是numpy.
Python3 全能补全在 Vim 自带的python3complete.vim 中定义。
:new
:set filetype=python
:echo &omnifunc
python3complete#Complete
我在这里的 Vim 安装中发现了这个:
/usr/share/vim/vim81/autoload/python3complete.vim
详情
1。用 +python3 编译的 Vim
:ve 检查 Vim 版本和启用的功能。这是我运行:ve时的相关输出
VIM - Vi IMproved 8.1 (2018 May 18, compiled Jul 28 2019 15:01:57)
...
Huge version without GUI. Features included (+) or not (-):
...
+python3/dyn
...
2。 Python安装
当有多个 Python 安装时,这很容易混淆。
例如,我有一个 Windows Python3 安装:
-
Windows Python3 从 PowerShell 运行
PS> python
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32
-
Windows Python3 从 Cygwin bash 运行
$ python.exe
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32
-
Windows Python3 不从 Cygwin Vim 命令行运行
:python3
- 当然我可以使用
:!python.exe 让 Vim 在 bash 中运行 python.exe
:!python.exe
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32
- 但这无助于全方位完成
- 对于 omni 补全,Vim 需要能够直接从 Vim 命令行进行 Python3
测试 Vim 可以调用 Python3:
:py3 print("hey")
hey
我必须使用 Cygwin 包管理器安装 Python 才能获得输出 hey。
3。 Python包安装
如果您有多个 Python 安装问题,那么还要安装另一个您想要全面完成的 Python 包副本。
例如,我使用 Cygwin 包管理器安装了 Python 包。
如果 Python 包无法通过包管理器获得,请在site.USER_SITE 标识的路径中克隆包存储库的副本。这是包搜索路径的一部分,因此全能补全也在此路径中搜索。
从 Vim 中找出 USER_SITE 路径:
: py3 import site; print(site.getusersitepackages())
路径应如下所示:
/home/myname/.local/lib/python3.7/site-packages
或者,从 bash 中检查:
$ python3.7 -m site --user-site
/home/myname/.local/lib/python3.7/site-packages
请注意,即使路径不存在,也已定义路径。如果这是第一次将包放在那里,您需要创建路径。
满足以上条件,全方位完成工作。启动一个.py 文件(或只打开一个新缓冲区和:set filetype=python),然后尝试输入以下内容:
import numpy as np
np.CTRL-X_CTRL-O
弹出全方位完整的窗口,用于循环使用CTRL-N(下一个)CTRL-P(上一个)。
还有额外的混淆,因为python3complete 不像ccomplete 那样使用标签文件。请看我对这个帖子的解决方案:Vim's Omnicompletion with Python just doesn't work