使用长行编辑xml文件在vim中确实很慢。我该怎么做才能解决这个问题?

时间:2009-05-23 10:59:17

标签: xml vim performance

我用vim编辑了很多xml文件。问题是,由于线条较长,vim中的导航/编辑速度极慢。有没有我可以做的事情(除了关闭语法高亮/文件类型插件和文件类型缩进),以便能够编辑这些文件没有那么多的延迟?

令人沮丧的是,语法突出显示等微不足道的事情被vim处理得如此糟糕。我不记得这是任何其他编辑的问题。我真的很喜欢使用vim,我希望有办法解决这个问题。

13 个答案:

答案 0 :(得分:58)

问题是VIM语法突出显示对于长行来说很慢。只是稍微降低功能性的简单修复是将语法突出显示限制为前x列。您的.vimrc

中有类似的内容
set synmaxcol=120

答案 1 :(得分:12)

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>

EDIt ---- 07/31/14

进一步的探索使我限制了最大列的语法。这非常有效,我没有遇到任何问题,因为我已将下面的内容添加到我的vimrc中。

set synmaxcol=250

这限制了前250列的语法。

答案 2 :(得分:10)

:set nocursorline

应该有帮助。

答案 3 :(得分:7)

如何漂亮打印XML文件(如果行长度是真正的问题)?你可以这样做,例如使用xmllint,它是Gnome libxml2包的一部分(并且还有适用于Windows的版本)。

您可以通过执行

就地打印
xmllint --format -o xmlFile.xml xmlFile.xml

答案 4 :(得分:7)

您是否禁用换行?根据我的经验,当使用很长的行时,换行可以减慢vim的速度。

set nowrap

答案 5 :(得分:4)

我发现最简单,最有效的解决方案是简单地禁用语法高亮:
syntax off

这似乎是处理长线时的罪魁祸首。另外,根据我对vim和xml的经验,文件的大小似乎并不重要 - 这是导致这些减速的长行。

我觉得有用的另一种解决方法是在folds中用长行包裹区域:

  <!--{{{ long lines -->
  <text>A reeealy long line</text>
  <!--}}}-->

关闭折叠将使vim无法解析这些行的语法。当然,这种方法并不总是实用的,但是当我只有几条长行,或者它们位于文件的特定区域时,它的效果非常好。

通常,Vim仍然明显变慢,但在大多数情况下,性能变得可以接受。

答案 6 :(得分:3)

不。这是语法突出思考,AFAIK。正如使用Vim正在使用的正则表达式方法不是编辑xml文件的最佳解决方案。

(当然,你总是可以尝试为xml编写自己的语法文件,希望你能做得更好)

答案 7 :(得分:2)

该作业有一个插件LargeFile。它会禁用某些事件,语法突出显示甚至撤消。您没有提到XML文件的大小,但插件是可配置的。您可以设置“大文件”的大小(以兆字节为单位),以便可以正常处理“不大的文件”。

答案 8 :(得分:1)

我经常更换&gt;&lt;与&gt; \ r&lt; - &GT; :s/>\s*</>\r</g然后使用gg=G重新整理整个文件。

答案 9 :(得分:1)

注释掉

syn sync match xmlSyncDT grouphere  xmlDocType +\_.\(<!DOCTYPE\)\@=+
在xml.vim文件中(带")。

这种问题可以在vim会话中通过键入:syntime on进行调试,做一些表明关注缓慢的事情,然后:syntime report。在我的情况下,它报告xmlSyncDT在我的6MB xml文件中花费超过10秒,使用4000个字符的行来显示文件的最后一页。在我注意到的情况下,注释掉上面的行并没有影响语法突出显示,只是现在显示屏幕的时间从来不会超过几分之一。

答案 10 :(得分:0)

添加到vimrc文件

nmap <leader>x <Esc>:set filetype=xml<CR>:%s/></>\r</g<CR><ESC>gg=G<Esc>:noh<CR>

然后按x会自动将xml文件打印出来。

答案 11 :(得分:0)

您可以通过此函数将.vimrc重新格式化您的xml文件,并希望减少行长度。

function! DoPrettyXML()
  " save the filetype so we can restore it later
  let l:origft = &ft
  set ft=
  " delete the xml header if it exists. This will
  " permit us to surround the document with fake tags
  " without creating invalid xml.
  1s/<?xml .*?>//e
  " insert fake tags around the entire document.
  " This will permit us to pretty-format excerpts of
  " XML that may contain multiple top-level elements.
  0put ='<PrettyXML>'
  $put ='</PrettyXML>'
  silent %!xmllint --format -
  " xmllint will insert an <?xml?> header. it's easy enough to delete
  " if you don't want it.
  " delete the fake tags
  2d
  $d
  " restore the 'normal' indentation, which is one extra level
  " too deep due to the extra tags we wrapped around the document.
  silent %<
  " back to home
  1
  " restore the filetype
  exe "set ft=" . l:origft
endfunction

command! PrettyXML call DoPrettyXML()

答案 12 :(得分:0)

这是由vim中的长行解析引起的。我终于发现,如果我从.vimrc删除了以下内容,问题就解决了:

filetype indent plugin on

请注意,如果在使用长行编辑文件时键入:filetype indent plugin off,则无效。