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所需要的。我想创建一个包含两个值的数组。
如何解决这个问题?
答案 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:
#
)之后,跳过重新缩进行。答案 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
可以纠正缩进。会帮到你
V
进行逐行选择,然后使用j
或k
选择更多行)然后触发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。