我有这个python脚本,在一行中我有一个1000个字符长的字符串。我有语法高亮,vim挂在这一行。如果我将文件扩展名更改为c ++而不是它的工作原理。我怀疑语法高亮插件的问题是导致挂起。
这可以以某种方式修复吗?我使用的是vim版本7.4.52
答案 0 :(得分:3)
过长的行可能会大大减慢Vim的语法高亮;通常,这是语法脚本的错误,您应该通知其作者(在$VIMRUNTIME/syntax/python.vim
脚本标题中找到)。
Vim 7.4包含:syntime
命令,这有助于排除故障并找到有问题的正则表达式。
:set synmaxcol=...
可能有助于低于默认3000
的值。
答案 1 :(得分:0)
首先确定让您放慢脚步的是您的~/.vimrc
还是vim命令:scriptnames
显示的许多vim加载脚本之一。另请参见:help scriptnames
。如果这是您的麻烦,那么此命令将很快:
vim -u NONE hugefile.txt
-u NONE表示不使用任何用户配置脚本。您必须使用消除过程来找出语法高亮显示,折叠,插件或其他类似磁盘错误,CPU节流,内存泄漏,虚拟内存耗尽,网络延迟或其他原因的问题。从〜/ .vimrc开始关闭内容,并通过将命令:scriptnames
放在脚本文件的顶部来禁用finish
中的脚本。
如果那不快,接下来确定是否是长行。如果要在vim缓冲区中渲染的行在视区中并且又很长,那么vanilla 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并查看标记为花费最多时间的
。有关可追溯到vimscript函数和语句级别的自省和性能,另请参见:help profiling
和http://vimcasts.org/episodes/profiling-vimscript-performance