LoginSignup
7

More than 3 years have passed since last update.

WindowsのVSCodeでclang-formatが効かない時の確認と対処

Last updated at Posted at 2020-04-05

TL;DR

  • 症状:WindowsのVSCodeでC/C++のファイルを編集時、関連プラグインがインストールされていて、かつ「Format on Save」が有効になっているにも関わらず保存時にフォーマッタが走らない。
  • 確認方法:C/C++のファイルを開いた状態で、コマンドパレットから「ドキュメントのフォーマット (Format Document)」を実行すると、右下に「write EPIPE」というエラーが出たらこれ。
  • 対応: ここから、「Windows 64 bit」をダウンロードしてLLVMをインストールし、clang-formatにパスを通し、VS Codeを再起動する。
  • 関連issue

詳細

もうTL;DRに書いた通りなんだけれど、WindowsのVSCodeでclang-formatが効かなくなった時の覚書。

VSCodeでC/C++のファイルを編集する際、まずC/C++のプラグインを入れると思う。ついでにClang-Formatプラグインを入れて、保存時にフォーマッタが走るようにする人も多いだろう。しかし、いつのまにかこれが動かなくなった。

具体的には、

  • Windows 10
  • VSCode 1.43.2
  • C/C++ プラグイン 0.27.0
  • Clang-Format プラグイン 1.9.0

の組み合わせで、保存時にフォーマッタが走ってくれない。

明示的にフォーマットさせるため、Ctrl+Shift+Pでコマンドパレット出して「format」と入力して「ドキュメントのフォーマット (Format Document)」を選んで実行すると、右下に「write EPIPE」というエラーが出てくる。こんなの。

epipe.png

調べてみると、Clang-Formatのプラグインのリポジトリに、同じ問題を報告したissueがあった。

そこに書いてあったWorkaroundが

  • LLVMを入れる

というものだった。

Clang-Formatプラグインは、clang-formatが見つからないと、VSCodeのC/C++プラグインが持っているclang-formatを使う。それは

C:\Users\ユーザー名\.vscode\extensions\ms-vscode.cpptools-0.27.0\LLVM\bin\

にあるのだが、どうもこれとの連携に問題があるらしい。

そこで、 ここから、「Windows 64 bit」をダウンロードしてLLVMをインストールし、clang-formatにパスを通す。LLVMのインストール時に「全員にパスを通す」か「カレントユーザのみにパスを通す」か選べるので、それはお好みで。ただし、ここでパスを通さない場合は、プラグイン側でパスを指定してやる必要がある。

パスを通した場合、適当なターミナル(例えばWindows PowerShell)を起動し、clang-format.exeにパスが通っていることを確認する。

PS C:\Users\username> clang-format.exe --version
clang-format version 10.0.0

この状態でVSCodeを再起動すれば、次からは保存時にclang-formatが走るはず。

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
7