2018/12/25

Recent entries from same category

  1. VimConf 2018 に行ってきた。
  2. Software Design 2018年7月号「Vim 絶対主義」の執筆に参加しました。
  3. Vim の :terminal の中から外の Vim を操る方法
  4. Vim と日本語入力の話。
  5. Windows で子プロセスの標準入出力バッファリングを無効にする

先日、Go Advent Calendar の記事の中で Language Server について書きました。

Big Sky :: gocode やめます(そして Language Server へ)

はじめに まず始めに言っておかなければなりません。 gocode 今まで本当にありがとう この記事は、Go 言語歴10年になる僕がこれまで愛用してきた Go 言語のコード補完ソフトウェア gocode...

https://mattn.kaoriya.net/software/lang/go/20181217000056.htm

僕は Vim を使っていて、幾らかの言語の開発環境は vim-lsp に移行できたのですが C/C++ を扱うケースだけ vim-lsp に移行できず vim-clang を使ってきました。C/C++ は clangd という Language Server を使うのだけど何故か clangd サーバがうまく補完候補を出してくれませんでした。調べてみると clangd は vim-clang の様に .clang ファイルを読み取ってくれず、compile_commands.json というファイルを読み取っているらしいのです。フォーマットは以下の様になっています。

[
 {
  "directory": "C:/dev/foo",
  "arguments": [
   "gcc",
   "-c",
   "-I.",
   "-DWIN32",
   "-s",
   "foo.c",
   "-o",
   "foo.o"
  ],
  "file": "foo.c"
 }
]

一つ二つなら自分で書く事も出来るのですが、ソースファイルが沢山ある場合にこんなの作ってられません。cmake を使っているプロジェクトであればこれを自動で生成してくれる方法があるらしいのですが、Makefile からは作ってくれません。これを自動で作る方法無いかなと調べていたら compiledb というコマンドがある事に気付きました。

GitHub - nickdiego/compiledb: Tool for generating Clang's JSON Compilation Database files for make-based build systems.

Compilation Database Generator Tool for generating Clang's JSON Compilation Database file for GNU ma...

https://github.com/nickdiego/compiledb

このコマンドを以下の様にインストールします。

pip3 install compiledb

インストールしたらいつもの make の手順に compiledb を付けて以下の様に実行します。

compiledb make

すると全てのビルドが終わったタイミングで compile_commands.json が生成されます。後は vim-lsp から補完を行えば vim-clang よりも高速に入力補完が行える様になります。

快適~


blog comments powered by Disqus