Podoba mi się pomysł .dir-locals.el
. Mam własny .dir-locals.el
plik w katalogu domowym, który powinien ustawić wszystkie zmienne dla katalogów / plików, które otwieram, chyba że znajduje się .dir-locals.el
bliżej katalogu, w którym otwieram plik. Jednak pomimo rozpoznania pliku zmienne katalogów dla podkatalogów nie są stosowane do otwartych plików.
To jest moje ~/.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))))
Kiedy otwieram plik, ~/dev/test/test.c
zmienna indent-tabs-mode
jest ustawiona na t
i c-basic-offset
ma wartość 8
.
(describe-variable 'c-basic-offset)
w pliku mówi mi, że jest on ustawiony na 8
od ~/.dir-locals.el
.
(describe-variable 'indent-tabs-mode)
w tym pliku mówi, że jego wartość ( t
) jest właśnie w stanie domyślnym.
Czy mogę w jakiś sposób osiągnąć pożądane zachowanie? Co ja robię źle? W jaki sposób ścieżki plików są mapowane do podkatalogów ~/.dir-locals.el
?
Edytować:
Jak zasugerował Jonathan , próbowałem też:
(;; dev/school subdir
("dev/school" .
;; dev/school specification for all modes
(nil . ((indent-tabs-mode . nil)
(c-basic-offset . 4)))))
a nawet co add-dir-local-variable
dodał:
(("dev/school"
(indent-tabs-mode)
(c-basic-offset . 4)))
Niestety, żadna z nich też nie działa.
add-dir-local-variable
i dodano~/.dir-locals.el
jeszcze krótszym składni niż kiedyś w pytaniu:("dev/test" (indent-tabs-mode))
. Nadal jednak nie działa.("dev/test" . ((spec1 ...) (spec2 ...) ...))
((org-mode . ((org-indent-mode . t))) ("subdir" . ((nil . ((org-indent-mode . nil))))
i działało poprawnie (monit o ustawienie lokalnego var na zero). Może spróbuj umieścić te root nad specyfikacjami sub-dir na liście, możliwe, że ustawi je na ostatnią znalezioną wartość.