我正在学习Vim,但我认为这是一项简单的任务,但我无法让它发挥作用。我有浏览器SO,但解决方案对我不起作用。
我正在尝试正确缩进文件(xml)。我使用的命令是:
gg=G
或 ggVG =(自己做这个可能会做一些不同的事情;))
我的.vimrc是:
syntax on
filetype plugin indent on
set nu
答案 0 :(得分:168)
我喜欢Berei的回答。但是,我认为以下内容更灵活,因为您不必更改vimrc
文件。此外,更容易格式化XML文件的选择部分(我碰巧做了很多事情)。
首先,突出显示要格式化的XML。
然后,在正常模式下,键入! xmllint --format -
底部的命令行如下所示:
:'<,'>!xmllint --format -
然后按回车。
所选文字将发送至xmllint
命令,然后--format
'编辑,xmllint
的结果将显示在vim中的所选文字上。命令末尾的-
用于接收标准输入 - 在这种情况下,是vim发送给xmllint
的选定文本。
答案 1 :(得分:60)
使用外部程序缩进xml
个文件。在这种情况下,我选择了xmllint
,因此请将命令设置为equalprg
选项:
:set equalprg=xmllint\ --format\ -
现在你可以执行
了gg=G
让xmllint
格式化您的xml
文件。
要在每次使用vim时获取,请使用autocommand
进行设置。
autocommand
来自以下评论
au FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null
答案 2 :(得分:29)
我喜欢的一个不需要任何第三方工具的简单解决方案是在每个开始标记&#39;&lt; ...&gt;&#39;之前插入换行符。然后你可以使用标准的vim自动缩进。简而言之:
%s/</\r</g
gg=G
自动缩进答案 3 :(得分:11)
简答:开启matchit.vim。您可以将packadd matchit
添加到.vimrc
,或使用vim-sensible,默认情况下启用它。
答案很长:我已尝试过很多策略来自动缩进Vim中的XML,包括xmllint approach discussed on the Vim wiki。 xmllint
的问题(以及与xmlformat
和tidy
等其他外部CLI工具相同的方法)是他们都坚持挤出空白换行符。如果您只想缩进XML,而不删除空行,注释和/或其他有意格式,那么xmllint
不是最佳选择。
事实证明,只要启用了matchit.vim脚本,Vim的equals(=)命令就已经支持XML了。启用它的一个非常简单的方法是采用tpope的vim-sensible。另一种方法是将packadd matchit
添加到.vimrc
。然后,XML格式将&#34;只是工作&#34;开箱即用。
答案 4 :(得分:10)
一旦〜/ .vimrc设置正确,这很容易实现。
在〜/ .vimrc中设置以下选项:
filetype indent on
set smartindent
这允许您将光标移动到文件的顶部并缩进到结尾:gg = G
您还可以使用可视模式选择所需的文本,然后点击=缩进。
答案 5 :(得分:4)
在VIM中,我使用以下命令自动缩进整个文件(使用硬标签):
:%!XMLLINT_INDENT="^I" xmllint --format -
^I
是您通过以下方式生成的单个字符: CTRL + v , CTRL + i
答案 6 :(得分:1)
我遇到了同样的问题。事实证明,该行
bar
我set viewdir=~\.vim\views\
中的导致了这个问题。只要确保你没有它。
答案 7 :(得分:1)
Jesse Hogan的答案很好,但我宁愿回答更简单:
在vim中并且已打开XML文件时,请在正常模式下编写以下内容:
:%!xmllint --format %
然后按Enter。您所有的XML文件都会被格式化。
记住,您应该已经安装过 xmllint 。
答案 8 :(得分:0)
对于使用coc.nvim
插件的用户,您可以通过coc-xml
安装:CocInstall coc-xml
,然后在您的配置文件nmap <silent> fm <Plug>(coc-format)
中映射格式密钥。从现在开始,您不仅可以格式化xml文件,还可以非常轻松地格式化其他文件