Vim 滚动缓慢

50

当我滚动时,Vim反应缓慢。当我连续按j/k键时,光标会跳过一些行。

我正在使用xterm和urxvt。在两者中,Vim的表现都是如此。

这种情况发生在本地,无论文件大小是小还是大。我确实使用Control + F / B,它们运行得非常好。

编辑:在小文件中使用ttyfast可以解决问题,但在大文件中仍然存在问题。当没有自定义设置时,它可以正常运行。

10个回答

85

:set lazyredraw会将屏幕更新缓冲而不是一直更新。当我执行复杂的宏回放时,通常会启用此选项。这可能对你有所帮助。


47

你尝试过使用'ttyfast'选项吗?请参阅:

:help 'ttyfast'

寻求帮助,并且:

:set ttyfast

启用它。

另外,您使用的是哪个版本?如果您尝试不进行任何自定义,是否已经尝试过以查看是否有您设置的某些内容正在干扰?

像这样运行它以省略任何vimrc设置和插件:

vim -u NONE

编辑:如果删除自定义设置可以解决问题,请迭代地删除一些内容,直到该行为返回。首先,将其缩小到vimrc问题或插件之一。


如果有("autocmd") " autocmd FileType python set complete+=k/home/lurst/.vim/pydiction-0.5/pydiction isk+=.,( "endif " has("autocmd")我注释掉了这些行,现在它可以工作了:D 谢谢 - LuRsT
2
为了找出具体引起问题的原因...可能有用的是对vim进行分析: https://dev59.com/u2ct5IYBdhLWcg3wQ7bP#12216578 - Rocketman
针对 NeoVim 用户:ttyfast 选项已被移除(请参见 6. Removed features)。 - meshy
我在将系统剪贴板中的文本粘贴到Vim中时,导航(j,k,...)变得极其缓慢。在我的~/.vimrc文件中添加“set ttyfast”立即解决了这个问题。 - Victoria Stuart

20

只有在使用syntastic的pylint.vim插件时才会出现这个问题。除了禁用语法检查器之外,我找到的唯一有用的方法是禁用当前行高亮显示:

:set cul!

这使我的滚动速度显著加快。


2
这很棒。注意:它只会去掉高亮,但仍然会突出语法。完美。 - fredrivett
你也可以针对你知道具有复杂语法高亮的特定文件类型执行此操作,例如 autocmd Filetype ruby setlocal cul! - Matthew

12

Vim的正则表达式重新计算漏洞

根据您使用的Vim版本,您可能会受到一个正则表达式重新计算漏洞的影响,其主要罪魁祸首似乎是突出显示光标行和显示相对行号:

set relativenumber
set cursorline

网络上有很多帖子报告这个问题(这里这里这里)。如果还使用语法高亮,问题似乎会更加严重。

就我个人而言,我通过在我的vimrc文件中添加以下内容来解决我的滚动缓慢的问题:

set number

我的 Vim

我的 Vim 是在 Debian 7.9 上通过 vim-nox 包安装的,版本号为 2:7.3.547-7。在 Vim 中输入 :version 命令可以查看版本信息:

VIM - Vi 改进版 7.4(2013 年 8 月 10 日,编译于 2014 年 12 月 11 日 03:17:52)

已包含修补程序:1-488


我从来没有使用过相对行号(我使用过去时,因为这是一个非常古老的帖子)。我记得语法是问题所在,但不记得相对行号了。 - LuRsT
1
cursorline and syntax with files using complex highlighting rules (like ruby) compound pretty poorly for me. In my .vimrc I cancel out only for those files: autocmd Filetype ruby setlocal nocursorline - Matthew
这导致了我的滚动延迟!非常感谢! - zarathustra

4
如果其他建议无法解决问题,可能是终端的问题。我的Ubuntu上的gnome-terminal与PuTTY使用相同的文件时滚动速度要慢得多。
如果您正在使用Ubuntu的默认gnome-terminal,则可以尝试另一个终端程序。对我来说,urxvt都可以工作(terminator也有类似的问题)。
$ sudo apt-get install rxvt-unicode
$ urxvt

主要缺点是它看起来不太好。你可以尝试这里的建议,让它看起来更好一些。
参考资料: 编辑:似乎对我来说真正的解决方案是在使用vim时停止全屏显示终端。

1
不错的复活:D。实际上,经过几年的使用,我发现vim在处理html文件时速度较慢,可能是语法文件的问题或者仅仅是因为通常html文件有很长的行,我不知道。有趣的是你推荐rxvt,因为我已经使用它一段时间了,我喜欢它,但并没有解决vim的问题。 - LuRsT
可以确认,当使用 Vim 时,Terminator 确实可能变得非常缓慢。尽管滚动时两者都使用了大量的 CPU 时间,但我可以注意到 Terminator 和 Konsole 之间存在很大的差异... - timss
外观不佳并不是一个缺点,因为只需要在配置文件中修改几行代码就可以让它成为最好看的终端之一。 - Kevin

3
回答有延迟了,但以上内容并没有帮助到我。
首先,找出确切的问题,而不是随意禁用一些东西。Vim有一个超级棒的分析器。
:help prof

这将让您开始,但我已经

:prof start ~/vim_profile
:prof func *
:prof file *

然后进行了一系列极慢的滚动。之后,

:prof exit

你可以查看vim_profile文件,确切地了解问题所在。在我的情况下,是matchparen引起的问题,我通过添加以下代码进行修复:

set noshowmatch

这段内容涉及到 .vimrc 文件,但是你的文件名可能不同。

另外,在我调整了 vim 自身之后,通过使用不同的终端(如 iTerm2 或 Alacritty),我能够进一步提高性能。


2

禁用括号高亮后,我的滚动问题得到了解决。在 ~/.vimrc 文件中添加:

let loaded_matchparen = 1

1
检查您的静默映射。如果您有以jkhl开头的映射,则可能会导致短暂的延迟。

0

我也遇到了类似的滚动问题。我真的不想完全关闭语法高亮,所以我禁用了“set cursorcolumn”和“set cursorline”,我的滚动速度就快多了。


0

我在树莓派1上运行vim。禁用这一行代码加快了速度:

set foldmethod=syntax  "slow!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接