我正在学习 Vim,但我认为这是一个简单的任务,但我不能让它工作。我有浏览器所以,但解决方案不适合我。
我试图正确缩进一个文件(xml):
gg=G
或者 GgVG = (这个是我自己编的,可能做了一些不同的事情;)
我的 vimrc 是:
syntax on filetype plugin indent on set nu
使用外部程序缩进 xml文件。在本例中,我选择了 xmllint,因此将命令设置为 equalprg选项:
xml
xmllint
equalprg
:set equalprg=xmllint\ --format\ -
现在你可以执行了
to let xmllint format your xml files.
要在每次使用 Vim时获得它,请使用 autocommand来设置它。
autocommand
autocommand来自下面的评论
au FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null
我喜欢贝雷的回答。但是,我认为以下内容更加灵活,因为您不必修改 vimrc文件。另外,格式化 XML 文件的选择部分更容易(我碰巧经常这样做)。
vimrc
首先,突出显示要格式化的 XML。
然后,在可视化模式下,键入 ! xmllint --format -
! xmllint --format -
底部的命令行如下所示:
:'<,'>!xmllint --format -
Then hit enter.
选定的文本被发送到 xmllint命令,然后 --format‘ ed,并且 xmllint的结果被放置在 vim 中选定的文本上。命令末尾的 -用于接收标准输入——在本例中,标准输入是 vim 发送给 xmllint的选定文本。
--format
-
简短的回答: 打开 匹配 Vim。您可以将 packadd matchit添加到您的 .vimrc,或者使用 活力四射,默认情况下启用它。
packadd matchit
.vimrc
长话短说: 我尝试了很多策略来在 Vim 中自动缩进 XML,包括 xmllint approach discussed on the Vim wiki。xmllint的问题(其他外部 CLI 工具如 xmlformat和 tidy也采用同样的方法)在于,它们都坚持挤出空白新行。如果您只想缩进 XML,而不想删除空行、注释和/或其他有意设置的格式,那么 xmllint不是最佳选择。
xmlformat
tidy
事实证明,只要启用了 匹配 Vim脚本,Vim 的 equals (=)命令就已经支持 XML。一个超级简单的方法,使它是采用 tPope 的 活力四射。另一个是将 packadd matchit添加到 .vimrc。然后,XML 格式化就可以立竿见影了。
一旦 ~/. vimrc 设置正确,就很容易做到这一点。
在 ~/. vimrc 中设置以下选项:
filetype indent on set smartindent
这允许您将光标移动到文件的顶部并缩进到末尾: gg = G
您还可以使用可视化模式选择所需的文本,然后点击 = 缩进它。
我喜欢的一个不需要第三方工具的简单解决方案是在每个开始标记“ < ... >”前插入一个换行符。然后您可以使用标准的 vim 自动缩进。简而言之:
%s/</\r</g
我也有同样的问题,事实证明
set viewdir=~\.vim\views\
是我的 .vimrc引起的问题,确保你没有。
在 VIM 中,我使用以下命令自动缩进整个文件(使用硬选项卡) :
:%!XMLLINT_INDENT="^I" xmllint --format -
^I是通过以下方式生成的单个字符: CTRL + v,CTRL + i
^I
杰西 · 霍根的回答很好,但我宁愿更简单的回答:
当您在 vim 中并且打开 XML 文件时,在正常模式下编写以下代码:
:%!xmllint --format %
然后按回车键。所有的 XML 文件将被格式化。
请记住,您应该安装 Xmllint之前。
对于那些使用 coc.nvim插件的,你可以通过 :CocInstall coc-xml安装 coc-xml ,然后在配置文件中映射格式键: nmap <silent> fm <Plug>(coc-format)。从现在起,您不仅可以格式化 xml 文件,而且可以非常容易地格式化其他文件
coc.nvim
:CocInstall coc-xml
coc-xml
nmap <silent> fm <Plug>(coc-format)
由于某些 Java 问题,无法使 coc-xml工作。考虑到许多现代系统已经提供了 python,使用 python 的 xml 模块可能是一个快速解决方案。将以下内容添加到您的 .vimrc
Com! FormatXML:% ! python3-c“ import xml.dom.minidom,sys; print (xml.dom.minidom.parse (sys.stdin) . toprettyxml ())”
现在您可以从 指挥官模式执行 :FormatXML
:FormatXML
:set ft=xml # OR :set syntax=xml
额外的好处 : 因为我是用 SAML 做这件事的,所以可以通过选择 base64文本(可视化模式)在 vim/nevim 中快速解码 基地64,并在命令模式下执行 !base64 -d。它将显示如下命令:
!base64 -d
: “ < ,”> ! base64-d