在Vim中编辑Yaml时出现错误的缩进

时间:2014-11-16 22:50:05

标签: vim yaml

Vim似乎没有对YAML文件中的短划线符号做出正确反应,因此打破了格式。

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

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

当我完成输入restart exim4并输入service: Vim redents时,我的最后service行:

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

很明显,Vim尝试对齐列式句子,但这不是YAML所需要的。我想创建一个包含两个值的数组。

如何解决这个问题?

8 个答案:

答案 0 :(得分:96)

为了在结肠后点击回车时将漂亮的2空间YAML作为默认值,我将其添加到我的.vimrc

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

对于OP的预期结果,这也很好用。

答案 1 :(得分:24)

安装此插件:

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

它是用Ansible制作的,但理论上它适用于各种YAML文件。如果你不使用ansible相关文件,你将不得不:设置filetype = ansible。

答案 2 :(得分:14)

您可以在键入:键时禁用reindent:

:set indentkeys-=<:>

请修改~/.vimrc文件,然后添加以下行:

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

注意: autocmd位于filetype之后。

您可以通过在 INSERT 模式下键入 CTRL-F 来触发reindent,例如:

hello: world
    foo: bar<C-F>

答案 3 :(得分:2)

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

autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab indentkeys-=0# indentkeys-=<:>

基本上,对于YAML文件,它指示Vim:

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

答案 4 :(得分:1)

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

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

然后,每个使用带有默认vim的文件的人,都可以共享文件创建者的配置。效果很好,特别是在合作时。

答案 5 :(得分:0)

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

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

  1. 输入您提供的代码段时,或
  2. 如果您已经编写了一些Yaml,则可以选择它(使用V进行逐行选择,然后使用jk选择更多行)然后触发vim格式化与=

答案 6 :(得分:0)

这是我要输入的augroup

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

答案 7 :(得分:0)

我找到了一个很好的答案,而不是更新 .vimrc。

here by Ignacio Vazquez-Abrams enter image description here