Omni 补全i_CTRL-X_CTRL-O
在 Vim 中无需安装插件即可工作,但前提是您满足以下三个条件:
- Vim 编译为
+python3
- Python3 已安装
- 对于您想要全方位完成的 Python 包:
- 软件包已安装
- 您正在编辑的脚本包含
import
Python 包的语句
- 如果在做
import numpy as np
,你是i_CTRL-X_CTRL-O
在打字后做的np.
,而不是numpy.
Python3 全能补全在python3complete.vim
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
Vimpython.exe
在 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
- 但这无助于全方位完成
- 为了全方位完成Vim 需要能够直接从 Vim 命令行到 Python3
测试 Vim 可以调用 Python3:
:py3 print("hey")
hey
我必须使用 Cygwin 包管理器安装 Python才能获得输出hey
。
3.Python包安装
如果您有多个 Python 安装问题,那么还要安装另一个您想要全面完成的 Python 包副本。
例如,我使用 Cygwin 包管理器安装了 Python 包。
如果 Python 包无法通过包管理器获得,请在site.USER_SITE
. 这是包搜索路径的一部分,因此全能补全也在此路径中搜索。
USER_SITE
从 Vim中找出路径:
: 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