Wie lege ich unter Windows 7 einen anderen Speicherort für die dot emacs .emacs-Datei fest?

16

Ich verwende einen Windows 7-Computer und habe keinen Administratorzugriff. Daher kann ich keine Punkt-Emacs-Datei im Stammverzeichnis ablegen. Kann ich einen anderen Speicherort für die Punkt-Emacs-Datei angeben?

Startec
quelle
Wenn Sie Ihren eigenen Standort der Emacs-Installation steuern können (z. B. wo immer Sie möchten oder zumindest Schreibzugriff auf die Installation haben), können Sie die vollständige Kontrolle übernehmen, indem Sie Ihre eigene Installation site-start.elladen, die init.elSie nicht mehr benötigen a .emacs. In diesem Beispiel müssen Sie nicht mit dem Basisverzeichnis herumspielen (es sei denn, jemand anderes auf dem Computer legt dort Dinge ab, die sich auf Ihre Arbeit auswirken). Mit anderen Worten, es kann leer sein und Sie müssen es nie berühren.
Gesetzesliste

Antworten:

4

Emacs sucht an mehreren Stellen nach Init-Dateien, wie im Handbuch dokumentiert . Wenn Sie Emacs anpassen möchten, müssen Sie mit einer dieser Dateien beginnen.

Ein gängiger Ansatz besteht darin, die Datei init.elin Ihrem zu verwenden user-emacs-directory, anstatt ein .emacsin Ihrem HOME-Verzeichnis zu haben.

Der user-emacs-directoryStandardwert ist ~/.emacs.d, also immer noch relativ zu Ihrem HOME, aber der Vorteil dieses Ansatzes ist, dass Sie alles, was mit Ihrer Emacs-Konfiguration zu tun hat, an einem Ort aufbewahren können. Dieses Verzeichnis kann sich unter Versionskontrolle befinden, gesichert sein, von mehreren Computern gemeinsam genutzt werden usw. Sie können einen Symlink ( mklinkunter Windows) verwenden, um die Dateien an einem anderen Ort zu speichern.

Beispielsweise ist es durchaus üblich, dass Leute ihre Emacs-Konfiguration auf Github beibehalten. Sie können viele Beispiele dafür finden, indem Sie Github mit init.el-Dateien nach elisp-Projekten durchsuchen .

Glucas
quelle
Ich mag diese Lösung und würde sie gerne verwenden, aber sie sagt mir immer noch nicht, wie ich meineuser-emacs-directory
Startec
Mein Vorschlag war, wirklich Symlinks zu verwenden. Wie die anderen Antworten zeigen, müssen Sie etwas an einem der Standardspeicherorte ablegen, die Emacs während der Init-Operation liest, auch wenn Ihre Konfiguration nur von einer anderen Stelle geladen wird.
Glucas
Die manuelle Verknüpfung ist unterbrochen.
corvus_192
16

Bei jeder Windows-Installation, bei der ich Emacs verwende, befindet sich der folgende Code in einer .emacsDatei am angegebenen Speicherort:

;; Place this file in C:\Users\Username\AppData\Roaming and point to the appropriate files
(setq user-init-file "C:/path/to/.emacs")
(setq user-emacs-directory "C:/path/to/.emacs.d/")
(setq default-directory "C:/whatever/you/want/to/start/in")
(setenv "HOME" "D:/my/home/directory")
(load user-init-file)

Auf diese Weise kann ich meine .emacsund .emacs.d/wo ich will.

Ryan
quelle
Vielen Dank, fast genau das, was ich brauchte. Ich habe das Standardverzeichnis verlassen und HOME verurteilt, aber sonst ist es das, was ich zum Setzen von q brauchte!
Grant Bowman
Ich versuchte es mit Ryans Antwort. Aber jetzt kann ich diese Datei nicht in Emacs aus dem Ordner AppData \ Roaming öffnen. Entschuldigen Sie bitte, da ich keinen Kommentar hinzufügen konnte, da ich noch keine 50 Punkte habe.
Sreekumar R
@SreekumarR Du solltest eine neue Frage stellen, indem du auf diese verlinkst, anstatt eine "Antwort" zu posten
Andrew Swann
@SreekumarR Wenn Sie eine neue Frage haben, so können Sie beides auf die Schaltfläche Frage stellen Taste. Fügen Sie einen Link zu dieser Frage hinzu, wenn dies zur Bereitstellung des Kontexts beiträgt. - Aus der Bewertung
Stefan
5

Ihre .emacs-Datei befindet sich in Ihrem HOMEVerzeichnis. Aus dem Emacs-Handbuch:

Das Windows-Äquivalent zu HOME ist das benutzerspezifische Anwendungsdatenverzeichnis. Der tatsächliche Speicherort hängt von der Windows-Version ab ...

Sie können diesen Standardwert von HOME überschreiben, indem Sie die Umgebungsvariable HOME explizit so einstellen, dass sie auf ein beliebiges Verzeichnis auf Ihrem System verweist. HOME kann entweder über die Eingabeaufforderung der Befehlsshell oder über das Dialogfeld "Eigenschaften" von "Arbeitsplatz" festgelegt werden. HOME kann auch in der Systemregistrierung eingestellt werden, siehe MS-Windows-Registrierung.

Tyler
quelle
1
Ja, ich weiß, wie man das Home-Verzeichnis einstellt. Aus Gründen der Versionskontrolle möchte ich jedoch festlegen, dass Emacs aus einem anderen Verzeichnis gelesen werden (damit ich ein für Emacs spezifisches Verzeichnis haben kann)
Startec
3
Beachten Sie, dass dieser Hack Emacs veranlasst, etwas anderes als das Ausgangsverzeichnis zu betrachten.
Wasamasa
@wasamasa - Ich würde es nicht als "Hack" bezeichnen. Wenn Sie in meinem Emacs 25-Build nicht "HOME" mit einer Umgebungsvariablen festlegen, wird standardmäßig das Emacs-Installationsverzeichnis verwendet, was eindeutig falsch ist. "HOME" sollte auf das eingestellt werden, was der Benutzer als sein Home-Verzeichnis ansieht, und das Einstellen der Umgebungsvariablen ist die beabsichtigte Standardmethode, um dies zu tun. Auf Unix-Systemen wird dies normalerweise bereits während des Anmeldevorgangs für den Benutzer ausgeführt, auf Windows muss dies jedoch manuell erfolgen.
TED
Das Ziel ist es, das, was Sie normalerweise als Ihr HOMEVerzeichnis ansehen, in etwas völlig anderes zu ändern . Daher nenne ich diese Änderung einen Hack. Es ist offensichtlich in Ordnung, ihn auf den richtigen Wert zu setzen.
Wasamasa,
2

Du sagst:

Ich weiß, wie man das Home-Verzeichnis einstellt. Aus Gründen der Versionskontrolle möchte ich jedoch festlegen, dass Emacs aus einem anderen Verzeichnis gelesen werden (damit ich ein für Emacs spezifisches Verzeichnis haben kann) .

Ihre Init-Datei befindet sich in Ihrem Home-Verzeichnis, das Sie überall ablegen können. Anscheinend möchten Sie ein anderes Verzeichnis für die Inhalte haben, die Emacs lädt. Das ist kein Problem. Legen Sie Ihre Init-Datei in Ihrem Ausgangsverzeichnis ab, und lassen Sie diese Datei dem Wert der Variablen ein weiteres Verzeichnis hinzufügen. load-pathAnschließend benötigen Sie alle anderen Emacs-Bibliotheken, die Sie verwenden möchten. Legen Sie diese Bibliotheken in das andere Verzeichnis.

IOW, Ihre Init-Datei muss nichts weiter als das Setup des Verzeichnisses enthalten, in dem Sie die Emacs-Bibliotheken aufbewahren, die Sie laden möchten.

Drew
quelle
0

Denke, du könntest (setq user-init-file "C:/path/to/.emacs")und andere von @ryan vorgeschlagene Zeilen in site-start.el einfügen

Ihre Site verfügt möglicherweise auch über eine Site-Startdatei. Diese Datei heißt site-start.el, sofern vorhanden. Wie default.el findet Emacs diese Datei über den Standard-Suchpfad für Lisp-Bibliotheken. Emacs lädt diese Bibliothek, bevor Ihre Init-Datei geladen wird.

Dima Fomin
quelle