6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

VSCodeよ、保存時にYAMLファイルのタブサイズを勝手にフォーマットすな

Last updated at Posted at 2022-10-29

はじめに

誰もがdocker-compose.ymlなどのYAMLファイルをVSCodeで編集することがあると思うんです。

こんな感じに↓

yaml_file_before.png

「よしできた!保存しよ~ (ctrl+s)っと..」

yaml_file_saved.png

「なんでそんなことするんだよ!」

「やめてくれよVSCodeさん..」

ってことが最近あって結構沼ったので、色々試した時のメモを置いておきます。

解決法だけ知りたい人

私が何を試したのかのかなんぞどーでも良いから成功した方法だけ知りたいという人はここから↓

やったこと③: yamlファイルの自動フォーマットを無効化する

やったこと①: ユーザー設定でYAMLのタブサイズを2にする

とりあえず設定をみてみると、あることに気づきました。

editor_tab_size.png

「あ、そういえばVSCodeの設定でタブサイズを4にしていたから保存時にインデントが2タブから4タブに変換したのか!」

「でも全体の設定が2タブになるのは違うよな..そうか! YAMLファイルだけ2タブになるように設定すれば良いのか!」

と思いユーザー設定のsettings.jsonに以下の設定を追加しました。

settings.json
{
    .
    .
    "[yaml]": {
        "editor.insertSpaces": true,
        "editor.tabSize": 2,
        "editor.autoIndent": "advanced"
    }
}

そして鼻歌を歌いながらもう一度YAMLファイルを2タブに直してから保存したら..

approach_1.png

効果なし!

次!

やったこと②: ユーザー設定でYAMLのオートインデントの設定を変更してみる

色々調べていたところ、自分と同じ状況の人がVSCodeのGithubリポジトリーでイシューをあげていたのを見つけました。

読んでみると解決法らしきコメントがあったのです!

Yaml has language specific default settings that wins over > > global settings:

 // Configure editor settings to be overridden for [yaml] language.
 "[yaml]":  {
 	"editor.insertSpaces": true,
 	"editor.tabSize": 2,
 	"editor.autoIndent": false
 },

You'll have to add a similar section to your user settings.

でも、「さっき追加した設定と何が違うの?」

と思ったのですがよくみるとeditor.autoIndentの設定が違うことに気づきました。

通りあえずeditor.autoIndent: falseとしてみると以下のようなメッセージで怒られてしまいました。

Value is not accepted. Valid values: "none", "keep", "brackets", "advanced", "full".(1)

どうやらいつからかeditor.autoIndentの仕様が変わったっぽいです。

editor.autoIndent: falseということは自動インデントを無効にすればよいということなので、none を設定してみました。

が、効果なし...

諦めて別の方法を探す旅へ...

やったこと③: YAMLファイルの自動フォーマットを無効化する

「自動フォーマットされるのが原因なのであればもうフォーマットしなければ良い!」

と当たり前のことに気づいたのでYAMLのフォーマットを無効にしてみる作戦に出ました↓

settings.json
{
    .
    .
    "[yaml]": {
        "editor.insertSpaces": true,
        "editor.tabSize": 2,
        "editor.autoIndent": "advanced",
        "editor.formatOnSave": false
    }
}

そして保存

yaml_file_saved_success.png

遂に成功しました!

フォーマットしていた犯人は誰?

「流石に成功しましたが何か腑に落ちないな..」

とりあえずは勝手にインデントされなくて済んだので一安心ですが、まだ気になる点が、

誰がフォーマットしていたのか???

そこで色々調べてみると、あるフォーマッターの仕業だということがわかりました。

そう、みんな大好きPrettierさん

「お前だったのか...」

P: 「私だ (ドン!)
prettier.png

ちなみに.prettierignoreファイルを作成すれば、特定のファイルに対してPrettierのフォーマットの無効化をすることができるみたいです。

参考

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?