2016-12-15 2 views
0

Jetzt versuche ich .dir-locals.el für meine eigenen Projekte zu verwenden. Allerdings wird es am Ende von init.el immer gespeichert, wenn ich es dauerhaft speichern möchte. Ich möchte es in eine andere separate Datei ändern - zB ~/mydirlocals.el.wie .dir-lokale Variablen in einem separaten Verzeichnis gespeichert werden

Bitte lassen Sie mich wissen, was könnte die Lösung dafür sein.

PS: Ich habe bereits versucht, benutzerdefinierte Datei zu einem separaten zu ändern. Aber leider hat es meine dir-lokalen Variablen mit anderen benutzerdefinierten Variablen gespeichert. Ich möchte dies vermeiden und speichern meine lokalen Variablen in einer separaten Datei.

Antwort

2

Sie können die Benutzeroberfläche anpassen nicht verwenden, um .dir-locals.el Dateien zu aktualisieren. Anpassen ist für Ihre eigene Konfiguration. Wenn Sie eine Datei mit lokalen Verzeichnisvariablen bearbeiten/aktualisieren möchten, müssen Sie diese Datei entweder direkt bearbeiten oder M-xadd-dir-local-variable verwenden.

Der letzte Befehl wird Sie zu den Details auffordern. Beachten Sie, dass kein Standardwert für den Wert der Variablen an der Eingabeaufforderung angeboten, aber, dass Sie geben können M-n oder < down> den Wert der Variablen in den aktuellen Puffer zu erhalten.

Beachten Sie auch, dass der Befehl tut nicht fragen, welches Verzeichnis die Variablen sind lokal für - es wird erstellen/aktualisieren Sie eine .dir-locals.el Datei im Standardverzeichnis für den aktuellen Puffer. Das Ausgeben des Befehls aus einem dired-Puffer für das beabsichtigte Verzeichnis ist natürlich ein sicherer Ansatz, aber Sie können dies aus einem Puffer in dem Modus tun, für den Sie Variablen hinzufügen möchten - auf diese Weise den Standardvorschlag für den Modus und Die aktuellen Werte der betreffenden Variablen sind für Sie nützlicher.

(Wenn es keine Datei des entsprechenden Typs im Verzeichnis ist, können Sie immer CxCf eine neue/nicht gespeicherten Puffer eines geeigneten Dateinamen verwenden add-dir-local-variable so oft wie nötig, und dann, wenn Sie‘ wiederholen Sie einfach alle neuen Puffer töten Sie erstellt, ohne sie zu speichern.)

Das alles gesagt, ich bin immer noch nicht 100% sicher, was Ihre Anforderung ist, da Ihre Frage ein wenig verwirrt ist; aber Sie können auch gerne wissen, dass Sie können verwenden Verzeichnis-lokale Variablen ohne eine .dir-locals.el Datei überhaupt, wie Sie sie alternativ vollständig in Ihrer Init-Datei konfigurieren können.

Einzelheiten und Beispiele dazu finden Sie unter https://www.emacswiki.org/emacs/DirectoryVariables.

+0

Tut mir leid, wenn ich dich verwirrt habe. Meine Frage ist, wie ich meine dir-lokale Variable dauerhaft in einer separaten Datei speichern kann. Wenn Sie eine Datei besuchen, fragt Emacs, ob ich mich bewerben möchte oder nicht, und bewerbe mich dauerhaft. Wenn Sie die letzte (dauerhaft anwenden) durch Drücken von! Auswählen, werden diese Variablen am Ende der Init-Datei vorangestellt. An dieser Stelle möchte ich diese in einer anderen eigenen Datei speichern, nicht in der Init-Datei. Gibt es einen Weg dazu? – windrg00

+0

Ah, ich glaube, ich verstehe, was Sie jetzt fragen. Emacs speichert nur die Tatsache, dass Sie bestimmte Werte als * akzeptabel * für bestimmte lokale Variablen genehmigt haben. Diese Daten geben keine festzulegenden Werte an. Emacs überprüft diese Daten einfach, um zu sehen, ob Sie Ihre Erlaubnis beim Festlegen lokaler Variablen benötigen, die möglicherweise ohne Ihre Zustimmung nicht sicher festgelegt werden können. – phils

+0

Sie können Emacs nicht anweisen, diese Daten automatisch irgendwo anders als Ihre 'custom-file' zu ​​speichern, aber wenn Sie * wirklich * wollen, gibt es nichts, was Sie davon abhält, diese Daten manuell in eine separate elisp-Datei zu verschieben -' (setq safe-local-variable-values ​​...) '- die Sie in Ihrer Init-Datei laden würden und dann die Customize-Schnittstelle verwenden würden, um die Daten aus' custom-file' zu ​​löschen. Sie müssten diese Wartung jedes Mal wiederholen, wenn Sie einen neuen sicheren Wert hinzufügen, also IMO wäre das sehr ärgerlich. – phils

2

Haftungsausschluss: Ich habe nicht dir-lokale vars verwendet, aber ich habe file-local vars verwendet. Ich vermute, die Einheimischen arbeiten gleich.

Die lokalen Variablen sind nicht am Ende der init.el oder custom.el, die sicheren Werte sind gerettet zu werden. Wie in, Emacs vertraut ihnen standardmäßig nicht, es sei denn, sie stimmen mit einer Art Prädikat überein, die anzeigt, dass sie in Ordnung sind. Dies ist eine gute Richtlinie, da Datei- und Dir-Locals dazu führen können, dass Emacs willkürlichen Code nur durch Öffnen einer Datei ausführt. Wenn Sie sich dauerhaft bewerben, sagen Sie Emacs, dass dieser Wert sicher ist. Im Grunde erstellt es nur ein Prädikat, das dem exakten Wert entspricht, und speichert es mit customize.

Wenn Sie die Eingabeaufforderung (und damit das Speichern) verhindern möchten, müssen Sie die Variablen mit Ihrem eigenen Prädikat als sicher kennzeichnen.

Zum Beispiel stelle ich

(put 'adaptive-wrap-extra-indent 'safe-local-variable 'integerp) 

was bedeutet, dass adaptive-wrap-extra-indent OK ist, solange es eine ganze Zahl ist. Ich weiß, das ist in Ordnung, weil ich diese Variable zu dem adaptive-wrap-Paket hinzugefügt habe (obwohl ich zu der Zeit über sichere Einheimische nicht wusste; ich habe einen Bug eingereicht, um es zu beheben, der anscheinend ignoriert wird). Natürlich können Sie jedes Prädikat verwenden, einschließlich (lambda (x) t), obwohl ich dagegen empfehlen würde.

Verwandte Themen