在Vim中编辑Yaml时缩进错误


90

Vim似乎对YAML文件中的破折号没有正确反应,因此破坏了格式。

例如,我有一个应该看起来像这样的块:

  handlers:
        - name: restart exim4
          service: name=exim4 state=restarted

当我完成输入restart exim4并输入service:Vim后,我的最后service一行缩进了一行:

  handlers:
        - name: restart exim4
        service: name=exim4 state=restarted

很明显,Vim试图按对齐句子,但这不是YAML所需要的。我想创建一个具有两个值的数组。

如何解决?

Answers:


25

安装此插件:

https://github.com/chase/vim-ansible-yaml

它是基于Ansible制作的,但从理论上讲,它将适用于各种YAML文件。如果您不使用ansible相关文件,则很可能必须:set filetype = ansible。


我看到了这个插件-它希望文件名具有特定名称和/或位于特定文件夹中。Ansible剧本不是我编辑的唯一文件。这就是为什么我什至没有尝试安装它的原因。谢谢,我将yml设置为'ansible'类型。
胶粘剂

1
哇,有很大的不同,我认为尽管常规yaml语法也值得修复
akostadinov

事实是,如果您采用这种方式,则必须放入# vim:ft=ansible:所有不可使用的文件。
伊利亚·林恩

158

当我在冒号后按回车键时,为了获得漂亮的2位YAML作为默认值,我将其添加到了我的代码中.vimrc

autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab

这对于OP的预期结果也非常有用。


2
谢谢,它能完成工作。
Gayan Weerakutti

漂亮又简单。与/etc/vim/vimrc(适用于全局配置)vim-ansible-yaml一起工作,而我无法使该插件在全球范围内工作。
服务器故障

4
考虑将其放在〜/ vim / ftplugin / yaml.vim中,并用长名称替换短名称,以备将来阅读。
exic

3
@LeviNoecker是的,只是像这样用逗号分隔它们autocmd FileType yaml,yml setlocal ...
Trey Stout


18

您可以在键入:密钥时禁用重新缩进:

:set indentkeys-=<:>

请编辑~/.vimrc文件,并添加以下行:

filetype plugin indent on
autocmd FileType yaml setl indentkeys-=<:>

注意: autocmd之后filetype


您可以通过CTRL-FINSERT模式下键入来触发重新缩进,例如:

hello: world
    foo: bar<C-F>

9

您可以使用以下自动命令使Vim正确缩进YAML文件(将其放入.vimrc):

" Fix auto-indentation for YAML files
augroup yaml_fix
    autocmd!
    autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab indentkeys-=0# indentkeys-=<:>
augroup END

基本上,对于YAML文件,它指示Vim执行以下操作:

  • 缩进使用2个空格。
  • 使用空格而不是制表符。
  • #在一行或冒号的开头插入注释字符()后,跳过重新缩进的行。

添加.yml也帮助
格特·范登贝尔赫

要什么 哪里?
–zog先生

3

您可以在YAML中添加注释,以告诉Vim该文件的特殊配置。例如:

# vim: set shiftwidth=2 tabstop=2 softtabstop=-1 expandtab:
foo:
  bar:
  - a
  - b

这样,每个使用带有默认vim的文件的人都可以共享文件创建者的配置。它运作良好,尤其是在合作时。


1

这是augroup我的Yaml:

augroup filetype_yaml
    autocmd!
    autocmd BufNewFile,BufReadPost *.{yaml,yml} set filetype=yaml foldmethod=indent
    autocmd FileType yaml |
        setlocal shiftwidth=2 |
        setlocal softtabstop=2 |
        setlocal tabstop=2
augroup END

0

我发现https://github.com/stephpy/vim-yaml很好用。这是一个Vim插件,可以对yaml文件进行缩进(和语法突出显示)。安装它也可以解决您所询问的特定问题。

您需要安装插件(请参阅GitHub存储库中的doco),只要您filetype=yaml可以纠正缩进即可。会帮到你们两个

  1. 输入您提供的代码段时,或者
  2. 如果已经编写了Yaml,则可以选择它(使用V逐行选择,然后使用jk选择更多行),然后使用以下命令触发vim格式化=
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.