2013-05-18 15 views
16

Tôi đang làm việc với một dự án C++ và cố định cấu hình nó để sử dụng cú pháp. Trong dự án của tôi, tôi có một cấu trúc thư mục lồng nhau của các tệp tiêu đề (Cấu trúc lồng nhau thực tế là tồi tệ hơn nhiều, đây là một ví dụ).Bao gồm các tệp tiêu đề đệ quy cho cú pháp

--libs  
    |---dir1 
     |---foo1.h  
    |---dir2 
     |---foo2.h 
     |---foo3.h 
     |---dir3 
       |---foo4.h 

Tôi đã bao gồm các tập tin lib trong tập tin vimrc của tôi sử dụng:

let g: syntastic_cpp_include_dirs = [ 'libs /']

tôi cho rằng điều này sẽ đưa tất cả các tập tin tiêu đề đệ quy, nhưng nó không. Trong đoạn mã, cú pháp tuân theo lỗi 'không tìm thấy tập tin hoặc thư mục nào'.

Khi tôi thay đổi một cách rõ ràng biến để đề cập đến một thư mục cụ thể:

let g: syntastic_cpp_include_dirs = [ 'libs/dir2/dir3 /']

nó hoạt động.

Câu hỏi của tôi:

  1. Làm thế nào để bạn cấu hình syntastic để nó bao gồm tập tin tiêu đề của một tập hợp các thư mục đệ quy?
  2. Bạn làm như thế nào cho nhiều dự án? Luôn chỉnh sửa .vimrc khi tôi chuyển dự án mà tôi đang thực hiện không đúng. Tôi tin rằng phải có một cách tốt hơn.

EDIT:

Tôi đã không đề cập rằng trong vimrc của tôi, các tùy chọn sau đây là món quà cho 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 
+0

Bạn đã thử 'let g: syntastic_cpp_check_header = 1' chưa? – timss

+0

Vâng, tôi có. Tôi đã thêm các tùy chọn cấu hình mà tôi đã có cho các câu hỏi ngay bây giờ. Xin lỗi vì điều đó. –

Trả lời

28

Bạn có thể bao gồm tất cả các thư mục cần tìm kiếm tệp tiêu đề cho mỗi dự án trong thư mục gốc của dự án trong một tệp .syntastic_cpp_config. Định dạng để làm như vậy sẽ giống như cung cấp các chỉ thị -I cho trình biên dịch.

Đối với trường hợp của bạn có nghĩa là:

  • Tạo một file .syntastic_cpp_config dưới sources (giả sử đó là nơi mã của bạn là gì và sources là ở một mức độ sâu tương tự trong hệ thống phân cấp thư mục như libs).
  • Đặt những dòng sau trong đó:

    -Ilibs/dir1

    -Ilibs/dir2

    -Ilibs/dir2/dir3

  • Lưu ý những lá cờ là 1 trên mỗi dòng.

  • Bằng cách này bạn không cần phải có tất cả thư mục bao gồm trong số .vimrc của mình.

Bạn có thể có một tập tin khác nhau để giữ cấu hình tùy chỉnh này mỗi dự án, xác định bởi các .vimrc biến toàn cầu g:syntastic_cpp_config_file, ví dụ:

let g:syntastic_cpp_config_file = '.my_custom_include_file_for_syntastic' 

Syntastic sẽ kiểm tra từng thư mục nguồn và trở lên cho đến khi nó tìm thấy tập tin này và sau đó sử dụng nó để sản xuất đầu ra của nó.

Xem Syntastic wiki page, Old link để biết thêm chi tiết.

0

Tôi đã có cùng một câu hỏi với chút may mắn. Tuy nhiên, tôi đã thấy rằng nếu tôi sử dụng tiêu đề kiểu dấu ngoặc kép, cú pháp sẽ kiểm tra một cách thích hợp các thư mục và không đưa ra cảnh báo. Ví dụ: nếu bạn đang làm việc trên foo2.cpp,

#include "dir3/foo4.h" 
#include "../dir1/foo1.h" 

Lưu khung bao gồm libs chuẩn và bất kỳ libs nào bạn cảm thấy như mã hóa thành vim.