我有这个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节流、内存泄漏、虚拟内存耗尽、网络延迟或其他什么。关闭从~/.virc开始的东西,并通过将命令finish
放在脚本文件的顶部来禁用:scriptnames
中的脚本。
如果速度不快,下一步再决定是否是排长队的问题。如果将在vim缓冲区中呈现的行在视图窗格中并且非常长,那么vanilla vim将从磁盘上读取该行的每一个字符,然后将set wrap
施加在缓冲区的该行上,以便聚合命令工作。关闭所有这些:
vim -u NONE --cmd "set nowrap" hugefile.txt
--cmd
意味着在缓冲区加载之前运行这个命令,这样vim就不会麻烦读取整行。如果速度很快,那么你的问题是vim正在阅读>10MB线路,用于向缓冲区演示。不要那样做,你就不会有问题。
其他想法是消除ft=
、syn=
和syntax off
以分离whodunit。我看到Vim8在5秒内从pcie nvme.m2 ssd打开15GB文件。同时提醒升级到neovim。
告诉vim帮助您确定哪个脚本的启动时间最长:
vi --startuptime log.out hugefile.txt
然后检查log.out并查看标记为花费最多时间的。
有关vimscript函数和语句级别的内省和性能测量,请参阅:help profiling
和http://vimcasts.org/episodes/profiling-vimscript-performance