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

Glu*_*eon 79 vim yaml

Vim似乎没有正确地对YAML文件中的破折号进行反应,因此打破了格式.

例如,我有一个块应该是这样的:

  handlers:
        - name: restart exim4
          service: name=exim4 state=restarted
Run Code Online (Sandbox Code Playgroud)

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

  handlers:
        - name: restart exim4
        service: name=exim4 state=restarted
Run Code Online (Sandbox Code Playgroud)

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

如何解决?

kim*_*noa 119

为了在冒号后回到回车符时将默认的2空间YAML作为默认值,我将其添加到我的.vimrc:

autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab
Run Code Online (Sandbox Code Playgroud)

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

  • 这是我上面评论的总和 --> https://gist.github.com/dragonken/c29123e597c6fdf022284cf36d245b64 (5认同)
  • 考虑将其放在〜/ vim/ftplugin/yaml.vim中,并用长名称替换短名称以备将来阅读. (4认同)
  • @LeviNoecker是的,只是像这样用逗号分隔它们,例如autocmd FileType yaml,yml setlocal...。 (3认同)
  • 谢谢,它完成了这项工作. (2认同)
  • 为此,我必须先让`filetype plugin indent on`。在此之前还有一个不错的方法是使用`syntax on`。 (2认同)

K. *_*ert 24

安装此插件:

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

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


Eug*_*ash 18

你可以使用这个自动命令让 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
Run Code Online (Sandbox Code Playgroud)

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

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


kev*_*kev 14

键入:键时可以禁用reindent :

:set indentkeys-=<:>
Run Code Online (Sandbox Code Playgroud)

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

filetype plugin indent on
autocmd FileType yaml setl indentkeys-=<:>
Run Code Online (Sandbox Code Playgroud)

注意: autocmd来之后filetype.


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

hello: world
    foo: bar<C-F>
Run Code Online (Sandbox Code Playgroud)