【发布时间】:2014-01-25 23:15:51
【问题描述】:
[更新 06/2013:正如用户 doubleDown 所观察到的,我的术语错误:方便的 C-p 和 C-n 击键不是 omni 完成(omnicompletion ),但是 关键字完成。我认为这里的 Vim 术语有点不幸:omni 是拉丁文的 every,而 keyword 似乎是一个更受限制的选择。 C-p 和 C-n 默认的工作方式是完成散文的每个单词,而不仅仅是关键字。这让我觉得他们一定是omni补全,而不仅仅是keyword补全。]
嗯... :-) ... 只需输入我的问题标题,highly effective answer 就会出现在标题相似的问题目录中。 (这只是表明这个网站有多好!)无论如何我都会问这个问题 - 也许有人在商店里得到了一个更令人满意的答案......所以这里是:
Vim keyword omnicompletion (by default bound to C-p and C-n in edit mode) 是穷人的智能感知,在我的经验中几乎一样好。它在缓冲区中搜索匹配的字符串。
但是,一些文件类型脚本通过关键字 omnicompletion 执行包含文件的递归搜索而超出了顶部。 (更新: 搜索包含的文件实际上是默认设置,正如 :help 'complete' 从 Vim 7.3 中看到的那样;只是对于某些文件类型,包含了很多东西,这可能会导致速度变慢次优算法加剧。)因此,对于 Perl 脚本,它将开始搜索模块列表。递归。这很快就会退化为一些严重的扫描,你知道,磁盘 I/O 和所有那些丑陋的东西。
因此,我宁愿避免使用该功能,因为我不得不使用C-c 中断搜索,从而失去了我获得的时间和便利,这会在输出中留下一些随机字符串,然后我必须删除。
因此,目前最好的解决方案就是在默认补全中禁用包含文件的使用:
:set complete-=i # remedy
:help 'complete' # documentation
有什么要补充的吗?
【问题讨论】:
-
使用 C++ 和 Boost,即使从 tmpfs 运行所有内容也很慢,使用 complete+=i...我总是运行 complete-=i
-
很确定你说的是关键字完成,它不同于omnicompletion(通过
C-XC-O使用)。我还没有完全理解omnicompletion,但到目前为止,解析语法文件的默认功能,我必须说,它非常不令人满意。 -
@doubleDown:我在说的是omnicompletion(这本身很好)触发对包含文件的递归搜索(当文件太多时可能会因为磁盘I/O而减慢你的速度) Perl 或 C++ 文件等可能会发生这种情况)。在我的问答中解决该问题。
-
好吧,让我解释一下:
C-p和C-n执行关键字补全(请参阅:h compl-generic),而C-x然后C-o执行全能补全(请参阅`:h compl-omni)。你根本没有使用omnicompletion。 -
@doubleDown:你说得对——多年来我一直把术语弄错了。我更新了我的问题以突出错误和差异。谢谢。
标签: perl vim omnicomplete