Vim python 语法高亮会在很长的行中挂起

Vim python syntax highlighting hangs for very long lines

我有这个 python 脚本,在一行中我有一个 1000 个字符长的字符串。我有语法突出显示,vim 挂在这一行。如果我将文件扩展名更改为 c++,它就可以工作。我怀疑是语法高亮插件的问题导致了挂起。

这能以某种方式解决吗?我正在使用 vim 版本 7.4.52

过长的行会显着减慢 Vim 的语法高亮;通常,这是语法脚本的错误,您应该通知其作者(在 $VIMRUNTIME/syntax/python.vim 脚本头中找到)。

Vim 7.4 包含 :syntime 命令,这对故障排除和查找有问题的正则表达式有很大帮助。

:set synmaxcol=... 设置为低于默认值 3000 的值可能会有所帮助。

Vim 很长的行挂起

首先确定拖慢您速度的是您的 ~/.vimrc 还是 vim 命令 :scriptnames 显示的众多 vim 加载脚本之一。另见 :help scriptnames。如果这是你的麻烦,那么这个命令会很快:

vim -u NONE hugefile.txt

-u NONE 表示不使用任何用户配置脚本。您将不得不使用消除过程来查明语法高亮、折叠、插件或其他类似磁盘错误、CPU 节流、内存泄漏、虚拟内存耗尽、网络延迟或其他问题是否挂起。从你的 ~/.vimrc 开始关闭东西,并通过将命令 finish 放在脚本文件的顶部来禁用 :scriptnames 中的脚本。

如果速度不快,接下来判断 very-long-lines 是否是问题所在。如果将在 vim 缓冲区中呈现的行在视图窗格中并且也很长,那么原版 vim 将从磁盘读取该行的每个字符,然后造成 set wrap 在缓冲区的那一行,以便聚合命令起作用。关闭所有这些:

vim -u NONE --cmd "set nowrap" hugefile.txt

--cmd 表示 运行 在缓冲区加载之前执行此命令,这样 vim 就不会费心读取整行。如果那很快,那么您的问题是 vim 正在读取 >10MB 行以呈现给缓冲区。不要那样做,你不会有问题的。

其他想法是消除 ft=syn=syntax off 以隔离 whodunnit。我见过 Vim8 在 5 秒内从 pcie nvme.m2 ssd 打开 15GB 的文件。也提醒升级到neovim.

告诉 vim 以帮助您确定哪个脚本占用的启动时间最多:

vi --startuptime log.out hugefile.txt

然后检查 log.out 并查看标记为花费最多时间的。

对于深入到 vim 脚本函数和语句级别的自省和性能测量,另请参阅 :help profilinghttp://vimcasts.org/episodes/profiling-vimscript-performance