(Mac)当语法设置为Ruby时,Vim相当慢

时间:2014-04-08 22:01:19

标签: ruby macos vim

我在MacVim 7.4(我使用命令行版本)上,通过Homebrew安装。

当语法突出显示Ruby代码时,Vim很慢。在vim中移动Ruby文件时,htop显示80%-100%的CPU使用率。

我在SO上找到了这些:

并尝试了提出的解决方案。我做了什么:

  • set regexpengine=1:没有任何改变。 CPU使用率仍然很高,性能也很慢。
  • set lazyredraw:事情变得更好,但权衡非常明显(光标在移动时消失)
  • 我检查了autocmd中的.vimrc语句,发现没什么特别慢的。我尝试删除所有插件,但问题仍然存在。

我尝试关闭语法,好吧,它解决了问题。另外,使用vim -u NONE启动vim,然后转动syntax on可以解决问题,所以我的.vimrc中必定会出现这种情况?

Here是指向vimrc的链接。

修改

我可能已经找到了有罪的设置。似乎有两个设置明显减慢了vim中的移动速度:

  • set relativenumber
  • set cursorline

请注意,这两个设置都会触发此行为。

当滚动按住jk时,这些设置会强制vim重绘屏幕上的大量内容。 我怀疑这里有一个解决方案,但我对任何事情都持开放态度。

编辑#2

请注意,relativenumbercursorline仅在Ruby文件中使用时才会触发此行为。无论多长时间,我尝试过的所有其他文件类型(relativenumbercursorline都会顺利滚动)。

3 个答案:

答案 0 :(得分:2)

正如avivr所说,由于foldmethod=syntax

,Vim在大文件中有时很慢(特别是对于ins-completion)

来自:help todo:

  
      
  • 折叠和PHP语法高亮的缓慢组合。脚本来   重现它。由"语法同步引发启动"与补丁相结合   7.2.274。 (Christian Brabandt,2010年5月27日)一般来说,折叠   '使用foldmethod'设置为"语法"是慢的。做剖析以找出原因。
  •   

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

这解决了我的问题。现在我可以在我的5000系列C ++文件中使用compl-whole-line完成功能,它可以即时而快速,而不是花费几分钟而且没有响应。

答案 1 :(得分:0)

众所周知,Ruby语法文件速度慢,禁用“光标线”,“光标列”和“#39;因为它们会产生最大的影响。

但是你也应该看看Vim slow with ruby syntax highlighting。可能有助于改善事物的东西。

答案 2 :(得分:0)

我遇到了这个问题,还试过set regexpengine=1和其他各种事情。 对我而言,根据正在编辑的文件的大小/复杂程度,似乎缓慢程度或多或少都很严重,但需要一段时间才能确定原因。

在我的情况下,罪魁祸首是以下设置:

autocmd Filetype ruby setlocal foldmethod=syntax

此设置告诉Vim根据语法元素(类,函数,条件)自动创建折叠。 在这种情况下,我认为在autocmd中设置它并不重要。 我认为问题在于,对于相当复杂的文件,折叠在编辑过程中被更新,导致复杂文件的速度显着降低。

希望这有助于某人。