在具有大C文件的vim中启用语法和语法折叠会使完成速度变慢

ske*_*ept 5 c vim

当我在大型C文件(约8000行)中启用语法时,完成ctrl-p和ctrl-n的速度非常慢(超过20)。当我关闭语法时,完成时间不到一秒钟。

我想出了一种再现这种行为的最小方法。使用一个空的.vim文件夹并仅使用以下几行创建一个.vimrc:

set syntax on
set foldmethod=syntax
Run Code Online (Sandbox Code Playgroud)

当您打开一个大的C文件时,完成(甚至是常规编辑)的速度非常慢。

编辑:

此行为是由于我使用的是Beta版本。我不确定是否应该完全删除此问题,还是将其留给其他人也有同样问题的线索。

idb*_*rii 5

Vim 有时在处理大文件时速度很慢(特别是对于 ins-completion),因为foldmethod=syntax

来自:帮助待办事项:

  • 折叠和 PHP 语法高亮的缓慢结合。重现它的脚本。由“syntaxsync fromstart”与补丁 7.2.274 结合引起。(Christian Brabandt,2010 年 5 月 27 日)通常,将“foldmethod”设置为“syntax”的折叠速度很慢。进行分析以找出原因。

FastFold 插件使得折叠仅在保存时重新计算(因此您总是使用foldmethod=manual- 但折叠是使用foldmethod=syntax或您之前设置的任何内容计算的)。

这为我解决了问题。现在,我可以在 5000 行 C++ 文件中使用 compl-whole-line 补全,它是即时且快速的,而不是花费几分钟且无响应。


Pet*_*ter 2

我猜你的完成是通过语法突出显示文件进行调整的。要看看是否是这种情况,并让完成变得精简而快速,请尝试

:set complete=.
Run Code Online (Sandbox Code Playgroud)

这将使补全仅使用当前文件。

阅读有关完整选项的更多信息

:help 'complete'
Run Code Online (Sandbox Code Playgroud)