解決方法
早速ですが、解決方法を記載していきます。
このエラーはbuild.sbtなどをvim側がうまく発見できずに発生しているエラーのため「build.sbtがあるのに何故?」というときに参考になるかもしれません。
前提
以下のような状態で発生する、該当エラーについては解決が可能です
- gitリポジトリのルートディレクトリ以外にbuild.sbtが配置されている
対応
cocのvim設定に以下を追加してください。
autocmd FileType scala letb:coc_root_patterns=['build.sbt']
これで正常に動作するようになります。
詳細
今回私は以下のようなプロジェクト構成でこのエラーにハマりました。
repository
├── .git
├── documents
└── project_root
└── build.sbt
この構成でproject_root以下でvimからscalaファイルを起動しても、何故かrepository直下に.metalsファイルが作成されてしまいNo Build Targetエラーになってしまいました。
いろいろ調べた結果以下のリンクに記載されているものを設定すれば正しくプロジェクトルートを読み込ませてあげることができそうだということがわかりました。
"coc.preferences.rootPatterns"
のデフォルト設定に.git
がありますね。怪しいです。
通常cocは.gitファイルがある場所をrootとして認識しながら起動するようになっているということみたいです。
修正方法としては少なくとも以下の2通りがありそうです
1. cocの設定ファイルでcoc.preferences.rootPatternsを修正する
2. ファイルパターンにより変数を上書きして修正する
私は今回は2のパターンを採用して修正しました。
それが対応ブロックに記載されている修正内容です。
配列の先頭にあるものから順にマッチしていくのかな?と思うので2つ目以降の要素はデフォルト設定を残しても良いのかもしれませんが、面倒なので検証していません。
まとめ
あんまりvim-metalsで開発している人はいないような気がしますが、cocのルートディレクトリ指定のせいでハマって悩んでる人は稀によくいるかもしれないので、少しでも参考になれば幸いです。