我正在学习Vim,但我认为这是一项简单的任务,但我无法让它发挥作用.我有浏览器SO,但解决方案对我不起作用.
我正在尝试正确缩进文件(xml).我使用的命令是:
gg=G
Run Code Online (Sandbox Code Playgroud)
或ggVG =(自己做这个可能会做一些不同的事情;))
我的.vimrc是:
syntax on
filetype plugin indent on
set nu
Run Code Online (Sandbox Code Playgroud)
Jes*_*gan 177
我喜欢Berei的回答.但是,我认为以下更灵活,因为您不必更改vimrc文件.此外,格式化XML文件的选择部分更容易(我碰巧做了很多事情).
首先,突出显示要格式化的XML.
然后,在正常模式下,键入 ! xmllint --format -
您在底部的命令行将如下所示:
:'<,'>!xmllint --format -
然后按回车键.
选定的文本将发送到xmllint命令,然后--format'ed,结果xmllint将放在vim中的所选文本上.的-在命令的末尾是用于接收标准输入-其中,在这种情况下,是VIM发送到所选择的文本xmllint.
Bir*_*rei 64
使用外部程序缩进xml文件.在这种情况下我选择了xmllint,所以将命令设置为equalprg选项:
:set equalprg=xmllint\ --format\ -
Run Code Online (Sandbox Code Playgroud)
现在你可以执行了
gg=G
Run Code Online (Sandbox Code Playgroud)
让xmllint格式化你的xml文件.
要在每次使用vim时获取它,请使用a autocommand来设置它.
autocommand 来自下面的评论
au FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
KFL*_*KFL 28
我喜欢的一个不需要任何第三方工具的简单解决方案是在每个开始标记"<...>"之前插入换行符.然后你可以使用标准的vim自动缩进.简而言之:
%s/</\r</ggg=G 自动缩进ctr*_*den 11
简短的回答:打开matchit.vim.您可以添加packadd matchit到您的.vimrc,或使用vim-sensible,默认情况下启用它.
答案很长:我已经尝试了许多在Vim中自动缩进XML的策略,包括在Vim wiki上讨论的xmllint方法.这个问题xmllint(并与其他外部CLI工具,如同样的方法xmlformat和tidy,太)是它们都坚持挤掉空白换行.如果你想要的只是缩进你的XML,而不删除空行,注释和/或其他有意的格式,那么xmllint这不是最好的选择.
事实证明,只要启用了matchit.vim脚本,Vim的equals(=)命令就已经支持XML了.一个非常简单的方法就是采用tpope的vim- sensible .另一个是加入packadd matchit你的.vimrc.然后,XML格式化将"正常工作"开箱即用.
jar*_*raj 10
一旦〜/ .vimrc设置正确,这很容易实现.
在〜/ .vimrc中设置以下选项:
filetype indent on
set smartindent
Run Code Online (Sandbox Code Playgroud)
这允许您将光标移动到文件的顶部并缩进到结尾:gg = G.
您还可以使用可视模式选择所需的文本,然后按=来缩进它.
小智 9
杰西霍根的答案很好,但我宁愿更简单的答案:
当您在 vim 中并打开 XML 文件时,在正常模式下编写以下内容:
:%!xmllint --format %
Run Code Online (Sandbox Code Playgroud)
然后按 Enter 键。您的所有 XML 文件都将被格式化。
请记住您之前应该安装过xmllint。
在 VIM 中,我使用以下命令自动缩进整个文件(使用硬制表符):
:%!XMLLINT_INDENT="^I" xmllint --format -
Run Code Online (Sandbox Code Playgroud)
这^I是您通过以下方式生成的单个字符:CTRL+ v, CTRL+i