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 profiling
和 http://vimcasts.org/episodes/profiling-vimscript-performance
我有这个 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 profiling
和 http://vimcasts.org/episodes/profiling-vimscript-performance