vim缩进HTML标签,并在单独的行上添加属性

时间:2019-07-04 12:57:28

标签: vim vim-plugin

我正在用vim编写一些html / vue代码,但是我发现自动缩进功能无法按预期工作,特别是嵌套标记和属性分成多行时。

我读了长的html标记商定的coding standard,我认为如果vim可以支持这种缩进样式,那就太好了。 我发现有多个类似的问题,例如this,但它们给出的答案并不令人满意。 我也尝试过html5 plugin的vim,但似乎没有太大帮助。

例如,我希望vim缩进如下:

<template>
    <my-tag 
        attr1
        attr2
        attr3>
        <my-sub-tag
            attr1
            attr2
            attr3>
        </my-sub-tag>
    </my-tag>
</template>

但是目前,当我按gg=G时,它会缩进如下内容:

<template>
    <my-tag 
     attr1
     attr2
     attr3>
        <my-sub-tag
      attr1
      attr2
      attr3>
        </my-sub-tag>
    </my-tag>
</template>

是否有相对快速的方法来修复它(例如一个不错的插件),还是vim尚未主要关注它?

1 个答案:

答案 0 :(得分:1)

您不必为此使用插件!使用gg=G时,将运行equalprg(请参阅:h 'equalprg')。如果未设置此选项,它将使用默认值或内置的equalprg,这就是为什么看到奇数缩进的原因,因为它们不是为html构建的。

您可以使用更能格式化特定文件类型的外部程序。例如,对于html,您可以将html-beautifynpm install --global html-beautify)用于CSS,json,而其他人则使用prettier

您可以执行以下操作来使用外部程序。

:setlocal equalprg=html-beautify -f - -I -s 2

prettier的较新版本还支持html格式。

:setlocal equalprg=prettier\ --stdin\ --parser=html

将此内容添加到~/.vim/after/ftplugin/html.vim并使用相同的命令gg=G设置行格式。

另请参阅:h 'formatprg':h gq命令。