VimでYamlを編集するときのインデントが間違っている


90

VimはYAMLファイルのダッシュ記号に正しく反応しないようで、フォーマットが壊れます。

たとえば、次のようなブロックがあります。

  handlers:
        - name: restart exim4
          service: name=exim4 state=restarted

入力を終えてVim restart exim4と入力するとservice:、最後のservice行が再度インデントされます。

  handlers:
        - name: restart exim4
        service: name=exim4 state=restarted

したがって、Vimは文を列方向に整列しようとしますが、YAMLで必要なものではありません。2つの値を持つ配列を作成します。

それを修正するには?

回答:


25

このプラグインをインストールします。

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

Ansibleを念頭に置いて作成されていますが、理論的には、あらゆる種類のYAMLファイルで動作します。ansible関連ファイルを使用していない場合は、残念ながら:set filetype = ansibleを実行する必要があります。


私はこのプラグインを見ました-それはファイル名が特定の名前を持っていること、および/または特定のフォルダにあることを期待しています。編集できるファイルはAnsibleプレイブックだけではありません。そのため、インストールもしませんでした。おかげで、ymlを「ansible」タイプに設定します。
Glueon 2014

1
すごい、大きな違いをyaml
生む

真実、あなたがこのルートに行くなら、あなたは# vim:ft=ansible:あなたのすべての非可読ファイルを置かなければなりません。
Elijah Lynn、

158

コロンの後にキャリッジリターンを押したときにデフォルトで素敵な2スペースYAMLを取得するために、これをmyに追加しました.vimrc

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

これはまた、OPの期待される結果のダッシュでうまく機能します。


2
ありがとう、それは仕事をします。
Gayan Weerakutti 2017年

素敵でシンプル。で動作します/etc/vim/vimrc(グローバル設定のため)私は得ることができなかったのに対し、vim-ansible-yaml世界的に仕事にプラグインを。
Server Fault

4
後で読みやすくするために、〜/ vim / ftplugin / yaml.vimに配置し、短い名前を長い名前に置き換えることを検討してください。
exic

3
@LeviNoeckerはい、次のようにカンマで区切ってくださいautocmd FileType yaml,yml setlocal ...
Trey Stout

2
これは上記の私のコメントの合計です-> gist.github.com/dragonken/c29123e597c6fdf022284cf36d245b64
Elijah Lynn

18

:キーを入力するときに再インデントを無効にすることができます:

:set indentkeys-=<:>

~/.vimrcファイルを編集して、次の行を追加してください:

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

注:の autocmd後にありfiletypeます。


INSERTモードで次のように入力してCTRL-F、再インデントをトリガーできます。

hello: world
    foo: bar<C-F>

9

この自動コマンドを使用して、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の追加も役立ちます
Gert van den Berg

何に?どこ?
mr.zog

3

YAMLにコメントを追加して、Vimにこのファイルの特別な設定を伝えることができます。例えば:

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

その後、デフォルトのvimでこのファイルを使用するすべてのユーザーが、ファイル作成者の構成を共有できます。それは特に協力するときうまくいきます。


1

ここだaugroupYAMLのために私が持っています:

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

https://github.com/stephpy/vim-yaml適切に機能することがわかりました。これは、yamlファイルのインデント(および構文の強調表示)を行うvimプラグインです。これをインストールすると、あなたが尋ねた特定の問題も解決されます。

プラグインをインストールする必要があり(GitHubリポジトリのdocoを参照)filetype=yaml、インデントを修正する必要があります。それはあなたの両方を助けます

  1. 提供したスニペットを入力するとき、または
  2. すでにいくつかのyamlが記述されている場合は、それを選択して(V行ごとに選択してから、jまたはkを使用してさらに行を選択する)、vimのフォーマットを次のようにトリガーします。=
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.