■ はじめに
Ansible の Playbook を書いて試すときは、普段 VSCode を使っているため、あまり vim は使っていません。ですが、vim しか使えない環境に置かれたときのために vim で Playbook (YAML) を書くときに便利そうな設定を調べました。
せっかくですのでまとめておきます。
■ .vimrc の中身
今のところ、 .vimrc
の中身は以下のようにしています。
set expandtab set softtabstop=2 set shiftwidth=2 set autoindent
それぞれの設定について簡単に説明します。
set expandtab
: Tab キーを押したときに Tab の代わりにスペースを入力する
省略系: set et
通常、Tab キーを押すと tab が入力されます。YAML のインデントには tab ではなくスペースを利用します。
そこで、set expandtab
で、Tab キーを押したときに tab の代わりにスペースを入力されうように設定します。
set softtabstop=2
: softtab(スペース)の幅をスペース2個にする
省略形: set sts
前述の set expandtab
で有効にした Tab キーによるスペース入力の、スペースの数を指定します。
Playbook (YAML)としては、スペースが2個でも4個でも階層的に矛盾がなければ構わないのですが、私はいつもスペース2個なので set softtabstop=2
を設定します。
set shiftwidth=2
: インデントレベルの変更時のスペースを2個にする
省略形: set sw=2
>>
や <<
などによるインデントレベルの変更時に使うスペースの数です。softtabstop
の数と合わせて、set shiftwidth=2
を設定します。
set autoindent
: 自動でインデントする
省略系: set ai
インデントされた状態の行をにカーソルがある状態で改行したときに、次の行で同じインデント位置を保つようにする設定です。
この設定は少し注意が必要です。手入力時は便利ですが、すでにインデントされたテキストをコピペすると余計なインデントが入ってしまいます。
例えば以下のインデントされたテキストの場合。
- hosts: eos gather_facts: no tasks: - name: test eos_command: commands: - show running-config register: result
ペーストすると以下のように余計なインデントが入ってしまいます。これは正しいPlyabookではありません。
- hosts: eos gather_facts: no tasks: - name: test eos_command: commands: - show running-config register: result
対策は以下のとおりです。(ほかにもあるかもしれません。)
対策1. 自動インデントが不要なときだけ無効(set noautoindent
/ set noai
)に設定する。
対策3. set paste
でペーストモードにしてからペーストする。
対策3. そもそも普段は自動インデント無効にしておき、必要な時だけ有効(set autoindent
/ set ni
)に設定する
■ まとめ
vim で Playbook (YAML)を書くときに便利そうな設定をまとめました。YAML では、インデントの数が情報構造に強く関わっているので、特にインデント周りの設定を好みに設定しておくと良いと思いました。
参考
参考にさせていただきました。ありがとうございます。 hatakazu.hatenablog.com
Ansible 公式ドキュメントでは、Ansible vim というプラグインが紹介されています。