我用vim编辑很多xml文件。问题在于,由于行太长,vim中的导航/编辑非常缓慢。除了关闭语法高亮/文件类型插件和文件类型缩进之外,我能做些什么来编辑这些文件而不会出现所有的卡顿?
真的很令人沮丧,像语法高亮这样微不足道的事情,vim处理得如此糟糕。我不记得其他任何编辑器都有这个问题。我真的喜欢使用vim,希望有一种方法来解决这个问题。
我用vim编辑很多xml文件。问题在于,由于行太长,vim中的导航/编辑非常缓慢。除了关闭语法高亮/文件类型插件和文件类型缩进之外,我能做些什么来编辑这些文件而不会出现所有的卡顿?
真的很令人沮丧,像语法高亮这样微不足道的事情,vim处理得如此糟糕。我不记得其他任何编辑器都有这个问题。我真的喜欢使用vim,希望有一种方法来解决这个问题。
问题是VIM对于长行的语法高亮处理较慢。一种简单的解决方法是将语法高亮限制在前x列中,以轻微降低功能为代价。可以在.vimrc
文件中添加以下内容:
set synmaxcol=120
:syntax off
起作用了。 - David现在是2014年,我使用的是Vim版本7.4。 语法高亮和长行组合仍然会导致vim表现不可接受的缓慢。 由于这是从Google返回的第一个响应,我想放弃我的“当前”解决方案。
我发现只需在加载有问题的文件后简单地切换语法开关即可使vim以可接受的速度运行。 为方便起见,您可以将其绑定
:syntax off
:syntax on
或绑定:nnoremap <leader>ts :syntax off<cr>:syntax on<cr>
我还发现,源化我的.vimrc也会产生同样的结果
:source $MYVIMRC
和必要的映射:nnoremap <leader>sv :source $MYVIMRC<cr>
编辑----07/31/14
进一步探索导致我限制了最大列的语法。 这很有效,自从我将以下内容添加到我的vimrc以来,我就没有遇到任何问题。
set synmaxcol=250
这慷慨地将语法限制在前250列。
:set nocursorline
应该会有所帮助。
你是否禁用了自动换行?在我个人的经验中,当处理非常长的行时,禁用自动换行会使 vim 速度变慢。
set nowrap
如果行长是真正的问题,那么对您的XML文件进行漂亮打印怎么样?您可以使用Gnome libxml2软件包中的xmllint
来完成这个任务(Windows也有可用版本)。
您可以通过执行以下命令在原地进行漂亮打印:
xmllint --format -o xmlFile.xml xmlFile.xml
syntax off
当处理长行时,这似乎是罪魁祸首。另外,根据我在vim和xml上的经验,文件大小似乎并不重要,而是长行导致了这些减速。 <!--{{{ long lines -->
<text>A reeealy long line</text>
<!--}}}-->
关闭折叠可以使vim不必分析这些行的语法。当然,这种方法并不总是实用的,但在我只有少量长行或它们位于文件的特定区域时效果非常好。
通常情况下,Vim仍然明显较慢,但大多数情况下性能是可以接受的。
不是的。据我所知,这是语法高亮的问题。Vim使用的正则表达式方法并不是编辑XML文件的最佳解决方案。
当然,你可以尝试编写自己的XML语法文件,希望你能做得更好。
有一个插件叫做LargeFile,可以用来处理这个任务。它会禁用一些事件、语法高亮甚至撤销功能。你没有提到XML文件的大小,但是这个插件是可配置的。你可以设置一个以兆字节为单位的“大文件”大小,这样“非大文件”就可以正常处理了。
syn sync match xmlSyncDT grouphere xmlDocType +\_.\(<!DOCTYPE\)\@=+
"
),可以通过在vim会话中键入:syntime on
,执行显示缓慢的操作,然后键入:syntime report
来调试此类问题。在我的情况下,它报告说在我6MB的xml文件中,4000个字符一行,仅显示文件的最后一页就需要超过10秒钟的xmlSyncDT
。尽管我注意到注释掉上面的行并没有影响语法高亮,但现在屏幕显示所需的时间从未超过一秒钟。我经常使用 :s/>\s*</>\r</g
命令将 >< 替换为 >\r<,然后用 gg=G
命令重新缩进整个文件。