【问题标题】:Wrong indentation when editing Yaml in Vim在 Vim 中编辑 Yaml 时缩进错误
【发布时间】:2023-03-18 06:28:01
【问题描述】:

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 所需要的。我想创建一个包含两个值的数组。

如何解决?

【问题讨论】:

    标签: vim yaml


    【解决方案1】:

    为了在我在冒号后按回车时将漂亮的 2 空格 YAML 作为默认值,我将其添加到我的 .vimrc

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

    这对于 OP 的预期结果也很合适。

    【讨论】:

    • 谢谢,它成功了。
    • 考虑将其放入 ~/vim/ftplugin/yaml.vim 并用长名称替换短名称,以便将来阅读。
    • @LeviNoecker 是的,只是用逗号分隔它们,就像这样autocmd FileType yaml,yml setlocal ...
    • 为此,我必须先拥有filetype plugin indent on。还有一个很好的接触是在此之前有syntax on
    • 这是我上面的cmets的总和 --> gist.github.com/dragonken/c29123e597c6fdf022284cf36d245b64
    【解决方案2】:

    安装这个插件:

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

    它是在考虑 Ansible 的情况下制作的,但理论上它适用于各种 YAML 文件。不幸的是,如果您不使用 ansible 相关文件,您将不得不 :set filetype=ansible。

    【讨论】:

    • 我看到了这个插件 - 它希望文件名具有特定名称和/或位于特定文件夹中。 Ansible 剧本不是我编辑的唯一文件。这就是为什么我什至没有尝试安装它。谢谢,我会将 yml 设置为“ansible”类型。
    • 哇,有很大的不同,我认为虽然常规的 yaml 语法也值得修复
    • 说实话,如果你走这条路,你必须把# vim:ft=ansible:放在你所有的非ansible文件中。
    【解决方案3】:

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

    :set indentkeys-=<:>
    

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

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

    注意:autocmdfiletype 之后。


    你可以在INSERT模式下输入CTRL-F来触发reindent,例如:

    hello: world
        foo: bar<C-F>
    

    【讨论】:

      【解决方案4】:

      您可以使用此自动命令使 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 也有帮助
      • 为了什么?在哪里?
      【解决方案5】:

      你可以在你的 YAML 中添加一个注释来告诉 Vim 这个文件的特殊配置。例如:

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

      然后每个使用默认 vim 的文件的人都可以共享文件创建者的配置。尤其是配合的时候效果很好。

      【讨论】:

      • VIM - Vi IMproved 8.1 (2018 May 18, compiled Apr 15 2020 06:40:31) 上仍然缩进 8 个空格
      • 保存带有注释的文件,然后用 Vim 重新打开。
      【解决方案6】:

      我发现 https://github.com/stephpy/vim-yaml 工作得很好。这是一个 vim 插件,可以对 yaml 文件进行缩进(和语法高亮)。安装它也解决了您询问的特定问题。

      您需要安装插件(请参阅 GitHub 存储库中的文档),并且只要您的 filetype=yaml 它会更正您的缩进。对你们都有帮助

      1. 在您输入所提供的 sn-p 时,或
      2. 如果你已经写了一些 yaml,你可以选择它(使用V 进行逐行选择,然后使用jk 选择更多行)然后使用= 触发vim 格式化

      【讨论】:

        【解决方案7】:

        这是我为 yaml 准备的 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
        

        【讨论】:

          【解决方案8】:

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

          hereIgnacio Vazquez-Abrams

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-12-31
            • 2021-09-27
            • 1970-01-01
            • 2010-09-29
            • 2014-07-29
            • 1970-01-01
            • 2022-09-28
            • 2011-10-21
            相关资源
            最近更新 更多