Wie kann ich einen zweiten .dir-Einheimischen haben?

7

Bei der Zusammenarbeit an einem Projekt werden bestimmte Bearbeitungsvariablen festgelegt, um sicherzustellen, dass jeder einen ähnlichen Codestil erzeugt. In Emacs werden diese normalerweise entweder als dateilokale Variablen oder als verzeichnislokale Variablen implementiert.

Dateilokale Variablen sind am besten geeignet, wenn Sie den Wert der Variablen an die Datei selbst anhängen möchten. Sie werden jedoch umständlich, wenn sie für jede Datei im Projekt immer wieder dieselbe Variable ist.

Die Verwendung einer verzeichnislokalen Variablen wäre die naheliegende Wahl, aber ich persönlich verwende diese, um die E-Mail festzulegen, die ich im Projekt verwende (im Gegensatz zu meiner geschäftlichen E-Mail usw.), um sicherzustellen, dass ich nie mit meinem Commit inkonsistent bin Daten.

Gibt es einen Weg, um dieses Problem zu umgehen? Kann ich zwei Dateien mit verzeichnislokalen Variablen im selben Verzeichnis haben (eine persönliche Datei und eine versionierte Datei)?

Verweisen: sx.el@3a5afcc

Sean Allred
quelle

Antworten:

4

Ab Version 26.1 unterstützt Emacs eine zweite zusätzliche .dir-locals.elDatei (treffend benannt .dir-locals-2.el).

Aus dem Emacs-Handbuch: "Lokale Variablen pro Verzeichnis":

Sie können auch .dir-Locations-2.el verwenden. Wenn gefunden, lädt Emacs es zusätzlich zu .dir-Locations.el. Dies ist nützlich, wenn .dir-local.el in einem freigegebenen Repository unter Versionskontrolle steht und nicht für persönliche Anpassungen verwendet werden kann.

ebpa
quelle
Ändern der akzeptierten Antwort, da dies die Empfehlung für die Zukunft sein sollte. Danke, dass du es hier hinzugefügt hast!
Sean Allred
Interessante Anmerkung: Die Dokumentation besagt , dass Emacs Lasten .dir-locals-2.elzusätzlich zu.dir-locals.el , aber es scheint das tatsächliche Verhalten ist es zu laden , anstatt von .dir-locals.el(zumindest auf Emacs 26.2).
0x5453
7

Das scheint zu funktionieren:

(defadvice hack-dir-local-variables (around second-dir-locals-file activate)
  ad-do-it
  (let ((dir-locals-file ".alt-dir-locals.el"))
    ad-do-it))
Sean
quelle
Gilt dies sowohl für .dir-locals.elals auch .alt-dir-locals.elin dieser Reihenfolge?
Sean Allred
Es tut nach meinen einfachen Tests.
Sean
Süss! Ich werde das morgen ausprobieren :)
Sean Allred