私はC++プロジェクトで作業していて、syntasticを使用するように構成しようとしています。私のプロジェクトでは、ヘッダーファイルのネストされたディレクトリ構造があります(実際のネストされた構造ははるかに悪いです、これは例です)。
--libs
|---dir1
|---foo1.h
|---dir2
|---foo2.h
|---foo3.h
|---dir3
|---foo4.h
以下を使用して、libファイルを.vimrcファイルに含めました。
g:syntastic_cpp_include_dirs = ['libs /']
これはすべてのヘッダーファイルを再帰的に取得すると思いましたが、そうではありません。コードでは、syntasticは「そのようなファイルまたはディレクトリが見つかりません」というエラーで文句を言います。
特定のディレクトリを参照するように変数を明示的に変更すると、次のようになります。
g:syntastic_cpp_include_dirs = ['libs/dir2/dir3 /']
動作します。
私の質問:
編集:
私の.vimrcには、syntastic用に次のオプションがあることについては触れませんでした。
let g:syntastic_check_on_open=1
let g:syntastic_enable_signs=1
let g:syntastic_cpp_include_dirs = ['libs/dir2/dir3', 'libs/dir2 ]
let g:syntastic_cpp_check_header = 1
let g:syntastic_cpp_remove_include_errors = 1
プロジェクトごとにヘッダーファイルを検索するすべてのディレクトリを、ファイル.syntastic_cpp_config
のプロジェクトルートディレクトリに含めることができます。そのための形式は、コンパイラーに-I
ディレクティブを提供するのと同じです。
あなたの場合、それは次のことを意味します:
sources
の下に.syntastic_cpp_config
ファイルを作成します(コードがそこにあり、sources
がディレクトリ階層のlibs
と同じ深さレベルにあると仮定します)。その中に次の行を入れてください:
-Ilibs/dir1
-Ilibs/dir2
-Ilibs/dir2/dir3
フラグは1行に1つであることに注意してください。
.vimrc
にすべてのインクルードディレクトリを含める必要はありません。.vimrc
グローバル変数g:syntastic_cpp_config_file
で指定された、プロジェクトごとにこのカスタム構成を保持するための別のファイルを作成できます。
let g:syntastic_cpp_config_file = '.my_custom_include_file_for_syntastic'
Syntasticは、このファイルが見つかるまで各ソースディレクトリ以上をチェックし、それを使用して出力を生成します。
詳細については、 Syntastic wikiページ 、 古いリンク を参照してください。
私は少し運が良かったのと同じ質問をしました。ただし、引用符スタイルのヘッダーインクルードを使用すると、構文によってフォルダーが適切にチェックされ、警告が発行されないことがわかりました。たとえば、foo2.cppで作業している場合、
#include "dir3/foo4.h"
#include "../dir1/foo1.h"
標準ライブラリとvimにハードコーディングしたいライブラリ用の保存ブラケットが含まれています。