在 Vim 中编辑 Yaml 时缩进错误
Posted
技术标签:
【中文标题】在 Vim 中编辑 Yaml 时缩进错误【英文标题】:Wrong indentation when editing Yaml in Vim 【发布时间】:2015-01-13 19:01:43 【问题描述】: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 所需要的。我想创建一个包含两个值的数组。
如何解决?
【问题讨论】:
【参考方案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-=<:>
注意:autocmd
在filetype
之后。
你可以在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
它会更正您的缩进。对你们都有帮助
-
在您输入所提供的 sn-p 时,或
如果你已经写了一些 yaml,你可以选择它(使用
V
进行逐行选择,然后使用j
或k
选择更多行)然后使用=
触发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
【讨论】:
以上是关于在 Vim 中编辑 Yaml 时缩进错误的主要内容,如果未能解决你的问题,请参考以下文章