Wrong indentation when editing Yaml in Vim

前端 未结 7 1095
一整个雨季
一整个雨季 2021-01-30 03:50

Vim does not seem to correctly react at a dash symbol in YAML files therefore breaking the format.

For example I have a block which should look like this:



        
相关标签:
7条回答
  • 2021-01-30 04:14

    I've found https://github.com/stephpy/vim-yaml to work great. It's a vim plugin that does indentation (and syntax highlighting) of yaml files. Installing it solves the specific problem that you've asked about too.

    You need to install the plugin (see the doco in the GitHub repo) and as long as your filetype=yaml it'll correct your indenting. It'll help you both

    1. as you're typing the snippet you've provided, or
    2. if you already have some yaml written, you can select it (with V for line-wise selection then use j or k to select more lines) then trigger the vim formatting with =
    0 讨论(0)
  • 2021-01-30 04:16

    You can add a comment in your YAML to tell Vim special config for this file. For example:

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

    Then everyone, who use this file with a default vim, can share the file creator's configuration. It works well especially when cooperating.

    0 讨论(0)
  • 2021-01-30 04:20

    Install this plugin:

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

    It is made with Ansible in mind, but in theory it will work with all kinds of YAML files. You will have to :set filetype=ansible unfortunately, if you are not working with ansible related files.

    0 讨论(0)
  • 2021-01-30 04:21

    Here's the augroup I have for 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 讨论(0)
  • 2021-01-30 04:23

    In order to get the nice 2-space YAML as the default when I hit carriage return after the colon, I added this to my .vimrc:

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

    This also plays nice with the dash for the OP's expected result.

    0 讨论(0)
  • 2021-01-30 04:25

    You can use this autocommand to make Vim properly indent YAML files (put it to your .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
    

    Basically, for YAML file it instructs Vim to:

    • Use 2 spaces for indentation.
    • Use spaces instead of tabs.
    • Skip re-indenting lines after inserting a comment character (#) at the beginning of a line, or a colon.
    0 讨论(0)
提交回复
热议问题