Vim 中的 Omnicomplete 可以用于 python/3 完整的函数名称还是方法?

Posted

技术标签:

【中文标题】Vim 中的 Omnicomplete 可以用于 python/3 完整的函数名称还是方法?【英文标题】:Can Omnicomplete in Vim for python/3 complete function names or just methods? 【发布时间】:2017-05-25 12:51:00 【问题描述】:

为了说明我的问题,这里有一个 Omnicomplete 如何在我的机器上运行的简单示例:

name = "Bob"
na<C-x><C-o>      gives-----> name
name.<C-x><C-o>   gives-----> (correct dropdown menu of methods for string)
prin<C-x><C-o>    gives-----> (-- Omni completion (^O^N^P) Pattern not found)

我期待最后一行扩展到 printprint( 或类似的东西。这是正确的行为吗(Omnicomplete 仅对 python/3 进行方法完成)?如果是这样,上述最后一种情况下的函数完成是否可以作为 sn-ps 的示例?

我在带有 tmux 的终端中使用 MacVim。我的 :version 说 VIM 8.0。我有+python/dyn+python3/dyn 功能。我的~/.vimrc 有这一行(除其他外):

autocmd FileType python set omnifunc=python3complete#Complete

目前,我只是在编辑 python3 文件,所以我认为 omnifunc=python3... 还可以。

半相关的 SO 帖子:Problem with Vim omnicomplete and system Python

编辑:我可能有一个解决方法,虽然我不知道如何实现它。

注意:

 import builtins
 builtins.pr<C-x><C-o>   gives-----> (dropdown menu with print() and property()    )
 builtins.pri<C-x><C-o>  gives-----> (autocompletes to builtins.print(             )

可以在不写入import builtins 和使用builtins 对象的情况下复制&lt;C-x&gt;&lt;C-o&gt; 的此操作吗?如果&lt;C-x&gt;&lt;C-o&gt; 前面的字符串中没有.,那么&lt;C-x&gt;&lt;C-o&gt; 搜索可能会假定builtins.

我愿意接受任何建议。

【问题讨论】:

【参考方案1】:

只需像Vim Wiki 中推荐的那样设置 Omni Completion,它将适用于所有语言:

filetype plugin on
set omnifunc=syntaxcomplete#Complete

【讨论】:

【参考方案2】:

您是否尝试将以下内容用于omnifunc:

autocmd FileType python set omnifunc=syntaxcomplete#Complete

【讨论】:

以上是关于Vim 中的 Omnicomplete 可以用于 python/3 完整的函数名称还是方法?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 的 #include 子句的 Vim 自动完成

PacVim:一个用于学习Vim的命令行游戏

Vim

如何更改 vscode 的 VIM 扩展中的光标键

VIM编辑器(第十章)

用于 CS 的 MacVIM 语法文件