Vim缩进xml文件
我正在学习Vim,但我认为这是一个简单的任务,但我不能得到它的工作。 我有浏览器,但解决scheme不适合我。
我正在尝试正确缩进一个文件(XML)。 我使用的命令是:
gg=G
或ggVG =(自己做这个可能会做一些不同的事情)
我的.vimrc是:
syntax on filetype plugin indent on set nu
我喜欢Berei的回答。 不过,我认为以下几点更灵活一些,因为你不需要改变你的vimrc
文件。 另外,格式化XML文件的select部分更容易(我碰巧做了很多事情)。
首先,突出显示要格式化的XML。
然后,在正常模式下,input! xmllint --format -
! xmllint --format -
底部的命令行如下所示:
:'<,'>!xmllint --format -
然后按回车。
技术说明
所选文本被发送到xmllint
命令,然后--format
,并且xmllint
的结果被放置在vim中所选的文本上。 命令的结尾是接收标准input – 在这种情况下,是vim发送给xmllint
的选定文本。
使用外部程序缩进您的xml
文件。 在这种情况下,我select了xmllint
,因此将命令设置为equalprg
选项:
:set equalprg=xmllint\ --format\ -
现在你可以执行了
gg=G
让xmllint
格式化你的xml
文件。
为了在每次使用vim时获得它,使用autocommand
来设置它。
autocommand
从下面的评论
au FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null
我喜欢的不需要任何第三方工具的简单解决scheme是在每个开始标记“<…>”之前插入一个换行符。 那么你可以使用标准的vim自动缩进。 简而言之:
-
%s/</\r</g
-
gg=G
自动缩进
简短的回答:使用vim- sensible ,默认打开matchit.vim 。
很长的回答:我已经尝试了很多策略来在Vim中自动缩进XML,包括在Vim wiki上讨论的xmllint方法 。 xmllint
的问题(和其他外部CLI工具,如xmlformat
和tidy
)也是,他们都坚持要挤出空白的换行符。 如果你只想缩进你的XML,而不删除空行,注释和/或其他有意的格式,那么xmllint
不是最好的select。
事实certificate,只要启用matchit.vim脚本,Vim的equals(=)命令已经支持XML。 一个超级简单的方法是采用tpope的vim- sensible。 然后,XML格式化将“刚刚起作用”。
一旦〜/ .vimrc正确设置,就很容易实现。
在〜/ .vimrc中设置以下选项:
filetype indent on set smartindent
这允许您将光标移动到文件顶部并缩进到最后:gg = G
您也可以select所需的文字与视觉模式,并打= =缩进。
在VIM中,我使用以下命令自动缩进整个文件(使用硬标签):
:%!XMLLINT_INDENT="^I" xmllint --format -
^I
是一个单一的字符,你通过生成: CTRL + v , CTRL + i
我有同样的问题。 原来,那行
set viewdir=~\.vim\views\
在我的.vimrc
导致了这个问题。 只要确定,你没有它。