我用vim编辑了很多xml文件。问题是,由于线条较长,vim中的导航/编辑速度极慢。有没有我可以做的事情(除了关闭语法高亮/文件类型插件和文件类型缩进),以便能够编辑这些文件没有那么多的延迟?
令人沮丧的是,语法突出显示等微不足道的事情被vim处理得如此糟糕。我不记得这是任何其他编辑的问题。我真的很喜欢使用vim,我希望有办法解决这个问题。
答案 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\)\@=+
"
)。
这种问题可以在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
,则无效。