Visual Studio Code | autopep8やblackで保存時にインデントをタブに変換する方法

Visual Studio Code 設定,Visual Studio Code

Visual Studio Code | autopep8やblackで保存時にインデントをタブに変換する方法

Visual Studio Code(VScode)でPythonを書く時に人気のフォーマッターである「autopep8」や「black」でファイルの保存時にインデントをスペースにする方法を紹介しています。

確認環境

Windows11
Visual Studio Code バージョン1.75

保存時にインデントを全てタブに変換する

「autopep8」や「black」のフォーマッターは、それぞれの設定や機能でインデントをスペースからタブに変換する事が出来ませんでした。

色々考えた結果、保存時にVSCodeのコマンドを実行してインデントをタブに一括変換する方法に落ち着きました。

VSCodeの「editor.codeActionsOnSave」では上手くいかなかった為、拡張機能「Run on Save」を使います。
「Run on Save」という拡張機能は現在2つありますが、「Run on Save – VSCode Extension」と記載されている方(ユーザーの少ない方)を使っています。

Run on Save – Visual Studio Marketplace

「settings.json」にて以下のJSONコードを追加します。

"runOnSave.commands": [
	{
		"match": ".*\\.py$",
		"command": "editor.action.indentationToTabs",
		"runIn": "vscode"
	}
]

「match」にて実行する際の対象を指定、Pythonファイルなので「.py」を指定しています。

「command」は実行するコマンドを指定、「インデントをタブに変換する」は「editor.action.indentationToTabs」になります。

「runIn」は実行するコマンドがターミナルのコマンドか、VSCodeのコマンドかを指定します。
ターミナルのコマンドの場合は「terminal」VSCodeのコマンドの場合は「vscode」を指定します。

インデントがタブに変換された事を確認

VSCodeの editor.codeActionsOnSave が上手くいかない理由

同じように保存時に実行するコマンドを指定できる「editor.codeActionsOnSave」はVSCodeに備わっている機能ですが、今回の場合は上手くいきませんでした。

理由の確認はできていませんが「editor.codeActionsOnSave」は拡張機能より前に実行してしまうのではないかと予想しています。

「editor.codeActionsOnSave」でインデントをタブに変換しても、その後にフォーマッターでスペースに変換してしまうといったところでしょうか。

「editor.codeActionsOnSave」を使った方法など、拡張機能を使わずに実装する方法を知りたいところです。