我喜欢Vim。但它现在让我很难过。
我使用了很多插件,在过去的6个月中,我发现了很多很棒的插件。但我的Vim也非常迟钝。我不断进行清理,但没有多大帮助。
我就是这样,Vim完全无法使用。感觉它以每秒2-5帧的速度渲染,切换标签/缓冲区需要大约一秒钟,滚动hjkl
非常糟糕,滞后非常糟糕,即使在插入模式下输入句子也很混乱(由于趋于落后)。
编辑:实际上,当我打开Vim的新实例时,OK-ish,但是在15分钟内它变得无法使用。
我花了4个小时试图找出导致痛苦的插件或配置。我没有成功。
但是,我确实发现,删除此设置会导致所有延迟消失:
syntax on
这3行与语法相结合使一切变得更糟。
set t_Co=256
set background=dark
colorscheme candyman
有趣。因此,语法突出显示将Vim从超级活泼变为令人难以置信的迟缓?
我尝试在“干净”模式下启用语法:
vim -u NONE
那不是问题。
所以似乎问题是Syntax Highlighting与我的一个或多个插件结合使用。我试过禁用一堆,没有运气。
有什么方法可以进行分析吗?我手动测试时已经筋疲力尽了。
有没有人有类似的经历?也许快速浏览我的.vimrc
,看看是否有什么响铃。
https://bitbucket.org/furion/dotfiles
解: 导致混乱的插件是:
Bundle "gorodinskiy/vim-coloresque.git"
我建议您阅读答案,好的见解。
编辑(1个月后): coloresque插件已经有了一些改进。
答案 0 :(得分:85)
:syntime on
在你的ruby文件中移动然后
:syntime report
它为我报告了以下最慢的匹配,你可以看到甚至没有一个匹配。
我在ruby.vim文件中禁用了rubyPredefinedConstant并解决了问题。 Vim正则表达式引擎不喜欢ruby语法高亮正则表达式中的东西。您必须在足够的语法高位和良好的性能之间找到平衡。
希望有所帮助,这是我的Mac OS 10.8.5,自制软件Vim 7.4(控制台vim)上报告的ruby的前3个最慢语法高亮正则表达式
TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN
3.498505 12494 0 0.008359 0.000280 rubyPredefinedConstant \%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!
2.948513 12494 0 0.006798 0.000236 rubyPredefinedConstant \%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!
2.438253 12494 0 0.005346 0.000195 rubyPredefinedConstant \%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\)\>\%(\s*(\)\@!
或者您可以按照Dojosto
的指示尝试vim-ruby
答案 1 :(得分:28)
从another stack overflow question,我通过在.vimrc文件中添加以下行来快速获得vim:
set re=1
这将迫使vim使用旧版本的正则表达式引擎,它实际上更快的红宝石。
答案 2 :(得分:23)
您有autocmd
个垃圾邮件。在重新添加autocmds之前,应将所有autocmd语句包装在清除组的组中。看起来你的.vimrc
已经将大多数autocmds注释掉了,所以可能有一个插件导致了这个问题。检查此命令的输出:
:au CursorMoved
如果那里有一堆重复的处理程序,那就是你的问题。
以下是来自my .vimrc的autocmd纪律示例:
augroup vimrc_autocmd
autocmd!
"toggle quickfix window
autocmd BufReadPost quickfix map <buffer> <leader>qq :cclose<cr>|map <buffer> <c-p> <up>|map <buffer> <c-n> <down>
autocmd FileType unite call s:unite_settings()
" obliterate unite buffers (marks especially).
autocmd BufLeave \[unite\]* if "nofile" ==# &buftype | setlocal bufhidden=wipe | endif
" Jump to the last position when reopening a file
autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif
" ...etc...
augroup END
autocmd!
块开头的augroup
会在重新添加autocmds之前清除当前组(在这种情况下为vimrc_autocmd
)。
答案 3 :(得分:13)
我注意到如果你使用任何动态改变背景颜色的东西,vim可以减速停止。尝试关闭:set cursorline
或:set cursorcolumn
(如果已设置)。
答案 4 :(得分:11)
我发现“set foldmethod = syntax”使7.4几乎无法使用,例如对于js&amp; ruby文件(ubuntu 13.10),而“set foldmethod = indent”工作正常。
答案 5 :(得分:8)
我要感谢大家帮助我解决这个问题。好消息是,我的Vim再次活泼。
我开始重新安装新的Vim。我不是通过插件添加插件,直到找到了所有邪恶的根源。
Bundle "gorodinskiy/vim-coloresque.git"
它的插件让我感到很痛苦。由于我有一段时间,它不是一个嫌疑人,这就是为什么我这么晚发现它。 这个插件的作用是,无论何时找到颜色的单词(例如红色,绿色)或十六进制值(例如#FFFFFF),它都会设置文本的背景颜色以匹配其描述的颜色。很棒的想法,但似乎执行不力。
删除此插件可以消除滞后。
但我并没有就此止步。我也完成了对.vimrc的重大清理工作。删除了一些我没用过的插件。分组我的autocmd
并删除不必要的内容。
我的Vim现在非常活泼。我很高兴。
答案 6 :(得分:4)
我很确定
set t_Co=256
set background=dark
colorscheme candyman
与这种滞后无关。两个第一行是无用的(可用颜色的数量是根据您的$TERM
定义的,而您的colorscheme已经确定set background=dark
)但不是真的有害。
常见的“Vim正在慢慢爬行”的原因包括写得不好autocmd
,太多autocmd
s,经常重新加载一个~/.vimrc
,写得不好的插件......
请发布您的设置,以便我们帮助您找出遇到这种延迟的原因。
答案 7 :(得分:4)
语法突出显示可能很慢,但应限于某些(有些病态)文件和特定语法。最新的Vim 7.4有一个新命令:syntime
来解决语法突出显示缓慢问题。
除此之外,通常还有一个二进制搜索,你可以在其中禁用一半的插件,然后只有一半(当问题仍然存在时)或另一半(当问题出现时)消失了,让你快速找到有问题的脚本。
答案 8 :(得分:3)
我已经有这个问题很长一段时间了,这让我发疯了。我尝试安装vim-ruby。不确定这是否有所帮助,但至少现在我拥有最新版本的ruby语法高亮显示(自上一版Vim发布以来,性能有所提高)。
然后我进一步观察,发现vim-ruby有一种模式可以跳过所有昂贵的突出显示。尝试将此行添加到您的vimrc并查看它是否有帮助(最终为我做了!):
$a = 0;
// $thisSub = []; put this before you first while loop
while ($row = mysql_fetch_array($query))
{
$sub1 = $row['TopicName']; ?>
<div class="col-sm-6">
<input type="checkbox" class="sub" name="checklist1[]" value="<?php echo $sub1;?>" disabled <?php echo (in_array($sub1, $thisSub)) ? 'checked="checked"' : ''; ?> >
<?php $a++; ?>
<label><?php echo $sub1;?></label>
</div>
<?php
}
答案 9 :(得分:2)
对我而言set relativenumber
功能正在放慢速度。尝试使用set norelativenumber
禁用它并进行测试。
答案 10 :(得分:1)
以防万一它可以帮助任何人:
我不小心为我的项目创建了一个非常大的标签文件;所以我的语法荧光笔正在搜索大文件以突出显示函数名称。
所以检查你的标签文件! (在我的设置中,我使用的是easy-tags,所以我的被放置在~/.vimtags