Neovim+ALEでclang-formatを使う。

好みの問題にはなりますが、プログラムコードを書く場合に、コードの整形を自動で行いたいという向きもあるでしょう。Python なら autopep8 とか。

C言語だと clang-format というものがありますがこれは Clang の配布物に含まれていて、別に Clang はいらないけど clang-format を使いたいという場合には 1GB を超えるツールをまるごとインストールするのは大変です。LLVM のダウンロードページにあるインストーラは Clang と LLD、その他の LLVM ツール類がやまほど含まれていて、巨大なパッケージになっています。

でも実際にほしいのは clang-format.exe だけ。ということで、ダウンロードしたインストーラを 7zip で展開してみたら、LLVM のツリー構造がそのまま展開されたので、そこから bin/clang-format.exe だけを抜き出して、パスの通った場所にコピーします。

興味本位でその他のファイルも眺めてみると、clang-format.exe の他に、clang-tidy.exe や clang-refactor.exe、clang-include-fixer.exe などというものもあります。使い方はよくわかりませんが、名前だけ見ると便利そう。ですが、たとえば include-fixer は参照が足りていない #include を構成してくれるというもので、不要な #include を見てくれるわけではないようです。

とりあえず、ALE で clang-format.exe を使って自動整形できればいいので、clang-format.exe だけに着目します。

余談ですが、Visual Studio 2017 や 2019 では、clang-format.exe を同梱しているようです。C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\VC\vcpackagesあたりにありますが、バージョンはちょっと古いようです。

コマンドプロンプトを開いて、clang-format -version などとして動作することがわかったら、Neovim の設定をします。
現在は .toml ファイルでプラグインをロードしているので、そちらでの設定です。
[[plugins]]
## Asynchronous Lint Engine
repo = 'w0rp/ale'
hook_add='''
  let g:ale_lint_on_enter = 1
  let g:ale_lint_on_text_changed = 1
  let g:ale_fix_on_save = 1
  let g:ale_fixers = {
  \   '*': ['remove_trailing_lines', 'trim_whitespace'],
  \   'c': ['clang-format'],
  \   'cpp': ['clang-format'],
  \   'python': ['autopep8', 'isort'],
  \   'go': ['gofmt']
  \}
  let g:ale_linters = {
  \   'python': ['flake8'],
  \   'c': ['cpplint'],
  \   'cpp': ['cpplint']
  \}
  let g:ale_python_autopep8_options = '--max-line-length=99'
  let g:ale_python_flake8_options = '--max-line-length=99'
  let g:ale_virtualtext_cursor = 1
'''
自分がちょくちょく使用する言語の設定だけですが、こんな感じ。ちなみに cpplint は Python で実行されるので、利用するには pip install cpplint が必要です。

0 件のコメント:

コメントを投稿

Vimの補完プラグインをインストール。その4

Vimの補完プラグインをインストール。その3 で、 ddc-tabnine が使えそうです、などと書いたのですが、早速やってみました。 まず、tabnineのバイナリを用意しないといけません。がどうにもTabNineのサイトがわかりにくいので、 tabnine-nvim にあるダ...