vimでyamlのオートインデントを設定
Kubernetesのyamlなど、最近はVimでyaml (yml)ファイルを記述する機会が増えました。 ただ、Vimのデフォルトのオートインデントだと、yamlファイルはかなり扱いにくいと思います。 今回は、Vimで快適にyamlファイルを編集するための設定を書きます。
最終形だけ欲しい場合は、他の設定も含まれていますが、こちらをご覧ください。
プラグイン
まず、プラグインをインストールします。
私はNeoBundleを利用しているため、.vimrc
の、NeoBundleプラグインを指定する場所に、このように書きます。
NeoBundle 'chase/vim-ansible-yaml'
chase/vim-ansible-yamlプラグインは、filetypeがansibleのファイルを対象に、yamlファイルのオートインデントを正しく(多くの人の思い通りに)するプラグインです。
スペース数
次に、インデントのスペース数を設定しましょう。 私は、普段は4なのですが、yamlファイルは2であることが多いので、拡張子に合わせてこのように記載します。
" Indent width if has("autocmd") "ファイルタイプの検索を有効にする filetype plugin on "ファイルタイプに合わせたインデントを利用 filetype indent on "sw=softtabstop, sts=shiftwidth, ts=tabstop, et=expandtabの略 autocmd FileType c setlocal sw=4 sts=4 ts=4 et autocmd FileType html setlocal sw=4 sts=4 ts=4 et autocmd FileType ruby setlocal sw=2 sts=2 ts=2 et autocmd FileType js setlocal sw=4 sts=4 ts=4 et autocmd FileType zsh setlocal sw=4 sts=4 ts=4 et autocmd FileType python setlocal sw=4 sts=4 ts=4 et autocmd FileType scala setlocal sw=4 sts=4 ts=4 et autocmd FileType json setlocal sw=4 sts=4 ts=4 et autocmd FileType yml setlocal sw=2 sts=2 ts=2 et autocmd FileType yaml setlocal sw=2 sts=2 ts=2 et autocmd FileType html setlocal sw=4 sts=4 ts=4 et autocmd FileType css setlocal sw=4 sts=4 ts=4 et autocmd FileType scss setlocal sw=4 sts=4 ts=4 et autocmd FileType sass setlocal sw=4 sts=4 ts=4 et autocmd FileType javascript setlocal sw=4 sts=4 ts=4 et endif
ポイントは、ymlとyamlの行です。
空行の後の行はインデントをクリア
空行があるというのは、複数のyamlファイルを書くときなどだと思います。 そのため、空行があったら、インデントをリセットして欲しいと思います。 その設定は、以下のようにかけば良いです。 これは、chase/vim-ansible-yamlプラグインのオプション設定です。
let g:ansible_options = {'ignore_blank_lines': 0}
yaml/ymlファイルをansibleファイルと見なす
再度書きますが、chase/vim-ansible-yamlプラグインは、filetypeがansibleのファイルを対象に、yamlファイルのオートインデントを正しく(多くの人の思い通りに)するプラグインです。 ですので、普通にyamlファイルやymlファイルを開いただけでは、filetypeがyamlとなっているため、このプラグインが機能しません。
そこで、ファイルタイプをansibleと見なすための設定をします。
vim ~/.vim/filetype.vim
ここに、以下のように記載します。
augroup filetypedetect au BufRead,BufNewFile *.yaml setfiletype ansible au BufRead,BufNewFile *.yml setfiletype ansible augroup END
これで、yamlファイルとyamlファイルが、ansibleと見なされるようになります。
おわりに
これで、yamlファイルとymlファイルが快適に作成出来るようになると思います。 具体的には、
apiVersion: apps/v1
と書いた後に、改行をしたら、もともとは勝手にインデントが追加されていたと思いますが、インデントなしで次の行が書けます。
また、元々の設定では、
metadata: name
このname
の後に、コロンを入力したら、自動的にインデントが上がってしまう現象などもあると思いますが、それもなくなります。
補足
ちなみに、Vimでは、行のインデントを上げる(1つ左にする)のは、Ctrl+t、インデントを下げるのはCtrl+d、です。 Vimを記述しているなら、これは覚えておくと便利だと思います。