thư mục gốc của dự án biến trong .dir-locals.el


8

Tôi đang sử dụng chế độ công ty để hoàn thành mã C ++. Để nói với phụ trợ clang của công ty, nơi các tệp bao gồm cho dự án hiện tại là tôi phải sử dụng .dir-locals.eltệp sau

((c++-mode (eval setq company-clang-arguments (append 
                                               company-clang-arguments
                                               '("-I/full/path/to/project/root/include"))))

Tôi phải chỉ định đường dẫn đầy đủ luôn. Có cách nào để thay thế full/path/to/project/rootbằng một biến lưu trữ đường dẫn của .dir-locals.eltệp không?

Tôi đã thử

 (c++-mode (eval setq company-clang-arguments (append
                                               company-clang-arguments
                                               (list concat "-I" default-directory "src")))))

nhưng vì default-directoryđược đánh giá trong tệp mà tôi đang mở nên nó không quay trở lại đường dẫn gốc của dự án mà là một số đường dẫn khác bên trong dự án.

Câu trả lời:


5

Tôi tìm thấy giải pháp với đạn . Nó có một chức năng projectile-project-rootcó thể được sử dụng để có được đường dẫn dự án.

Tôi không thể sử dụng các mục sau .dir-locals.elvà nó vẫn hoạt động khi tôi di chuyển dự án hoặc sử dụng nó trên một máy khác.

((nil . ((eval . (progn
                   (require 'projectile)
                   (setq company-clang-arguments (delete-dups (append
                                                  company-clang-arguments
                                                  (list (concat "-I" (projectile-project-root) "src"))))))))))

Nhược điểm duy nhất là nó cần có đạn và dự án phải là một dự án phóng (không có vấn đề gì vì mọi thư mục có git / bzr / hg / ... là một dự án hợp lệ).

cập nhật

Như đã chỉ ra trong các ý kiến ​​cũng có thể sử dụng

(locate-dominating-file default-directory ".dir-locals.el")

thay vì projectile-project-root.


3
(locate-dominating-file default-directory ".dir-locals.el")cũng có thể là một tùy chọn, thậm chí có thể viết tắt thành một hàm.
Politza

Đây là khá nhiều những gì projectile-project-rootlàm. Cảm ơn các mẹo mặc dù.
kain88

@politza: Tôi không nghĩ rằng nó hoạt động: nó sẽ chọn gần nhất .dir-locals.el, không phải là hình thức xuất phát.
Clément

Tôi nghĩ rằng sử dụng dir-locals-filebiến thay vì chuỗi ".dir-locals.el" là phù hợp hơn
sivakov512
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.