让Vim识别XML

让Vim识别XML,xml,vim,indentation,vi,Xml,Vim,Indentation,Vi,我希望Vim能帮助我缩进XML文件,比如我的C代码。然而,当我使用 gg=G 它只是把所有的东西都放在左边。我需要指定语法吗?XML是否被识别为一种语言?是的,:set syntax=XML应该可以工作。在vim 7.3中,这将设置:set indentexpr=xmldindentget(v:lnum,1) 如果您有一个单行文件,则可能需要在每个标记后插入换行符(或以不同方式拆分)以:%s/\(]*>\)/\1\r/g 然后,gg=G应该可以工作。Put filetype plugin in

我希望Vim能帮助我缩进XML文件,比如我的C代码。然而,当我使用

gg=G

它只是把所有的东西都放在左边。我需要指定语法吗?XML是否被识别为一种语言?

是的,
:set syntax=XML
应该可以工作。在vim 7.3中,这将设置
:set indentexpr=xmldindentget(v:lnum,1)

如果您有一个单行文件,则可能需要在每个标记后插入换行符(或以不同方式拆分)以
:%s/\(]*>\)/\1\r/g

然后,
gg=G
应该可以工作。

Put

filetype plugin indent on
.vimrc
中,让Vim自动将.xml文件标识为xml。你可能需要把

set nocompatible
在那之前

如果文件扩展名不是.xml,可以使用

:set filetype=xml

完成此操作后,Vim的自动缩进(和语法突出显示,以及omnicomplete(在xml中只是关闭标记,但这仍然是一个问题))将对xml正常工作。

将这一行添加到.vimrc文件中:

:map <Space>fx :%s/\ </\r</g<cr>:%s/\ android/\randroid/g<cr>:g/^$/d<cr>gg=G`

:map fx:%s/\n我正在运行一个相当旧的Fedora Core版本:(一直使用vim 7.2,所以我没有自动缩进。@IslandCow我认为这不重要。如果没有
XmlIndentGet
函数,您只需要从vim-7.3运行时获取
indent/xml.vim
。我在这个文件中没有看到任何vim-7.3特定的内容。xml语法在Windows 7.2中似乎工作正常。作为用户,您不应该这样做o担心indentexpr,只要语法设置正确,就可以了。(尽管您也可以尝试使用
:set filetype=xml
)对于单个行拆分,我使用::s/>/>\r/g命令,即用换行符(>\r)(g代表全局(在行中))替换(:s)每个>(xml结束标记)a>(xml结束标记)。这将在已经有新行但又快又容易记住的每个结束标记后留下新行。我不希望在每个标记后都有新行,只希望在结束标记后有新行。调整的正则表达式:
:%s/\(]*>\)/\1\r/g
在兼容模式下运行Vim就像运行旧的vi…这是兼容模式的一点,但遗憾的是这是默认值。如果您在javaFX中编辑FXML,则
:set filetype=xml
命令为您的文件带来了祝福的语法色彩。太棒了!