Saya suka ide .dir-locals.el
. Saya memiliki .dir-locals.el
file saya sendiri di direktori home saya yang harus mengatur semua variabel untuk direktori / file yang saya buka kecuali ada .dir-locals.el
lebih dekat ke direktori saya membuka file. Namun, meskipun file tersebut dikenali, variabel direktori untuk subdirektori tidak diterapkan pada file yang dibuka.
Ini milik saya ~/.dir-locals.el
:
(("dev/school" .
((indent-tabs-mode . nil)
(c-basic-offset . 4)))
("dev/test" .
((indent-tabs-mode . nil)
(c-basic-offset . 4)))
(c-mode .
((c-file-style . "linux")
(c-basic-offset . 8))))
Ketika saya buka file ~/dev/test/test.c
variabel indent-tabs-mode
diatur ke t
dan c-basic-offset
adalah 8
.
(describe-variable 'c-basic-offset)
dalam file itu memberitahu saya itu diatur 8
dari ~/.dir-locals.el
.
(describe-variable 'indent-tabs-mode)
dalam file itu mengatakan nilainya ( t
) hanya dalam keadaan default.
Bisakah saya mencapai perilaku yang diinginkan? Apa yang saya lakukan salah? Bagaimana jalur file dipetakan ke subdirektori ~/.dir-locals.el
?
Edit:
Seperti yang disarankan Jonathan , saya juga mencoba:
(;; dev/school subdir
("dev/school" .
;; dev/school specification for all modes
(nil . ((indent-tabs-mode . nil)
(c-basic-offset . 4)))))
dan bahkan apa yang add-dir-local-variable
ditambahkan:
(("dev/school"
(indent-tabs-mode)
(c-basic-offset . 4)))
Sayangnya, tidak satu pun yang berfungsi.
add-dir-local-variable
dan itu ditambahkan ke~/.dir-locals.el
dengan sintaks bahkan lebih pendek daripada yang saya digunakan dalam pertanyaan:("dev/test" (indent-tabs-mode))
. Tapi tetap saja tidak berhasil.("dev/test" . ((spec1 ...) (spec2 ...) ...))
((org-mode . ((org-indent-mode . t))) ("subdir" . ((nil . ((org-indent-mode . nil))))
dan itu berfungsi dengan baik (diminta untuk mengatur var lokal ke nol). Mungkin mencoba meletakkan yang root di atas spesifikasi sub-dir dalam daftar, mungkin ia menetapkannya ke nilai terakhir yang ditemukan.