Einige Leute denken vielleicht, dass es einfacher zu bedienen ist setq
. Einige Leute denken vielleicht, dass es lispy ist. In Wirklichkeit ist es im allgemeinen Fall naiv.
Es ist wahr, dass es für einige Benutzeroptionen keine Rolle spielt. Aber für andere ist es wichtig und setq
der falsche Ansatz für diese Optionen. Ist also in der Regel setq
der falsche Ansatz.
Wenn Sie custom-set-variables
oder customize-set-variable
anstelle von verwenden setq
oder wenn Sie die Benutzeroberfläche anpassen (z. B. M-x customize-option
) verwenden, sind Sie sicher, dass der für den Optionswert erforderliche Initialisierungs- oder Aktualisierungscode automatisch ausgelöst und nach Bedarf ausgeführt wird. Wenn Sie verwenden setq
, wird dies nicht durchgeführt.
Nun ist es auch so, dass die meisten Benutzeroptionen, insbesondere viele von ihnen, die für Bibliotheken von Drittanbietern geschrieben wurden, die defcustom
Schlüsselwörter :set
und nicht verwenden :initialize
und die Verwendung setq
für sie keine Rolle spielt. Aber viele Vanille-Emacs-Optionen verwenden solche Schlüsselwörter, und für diejenigen, die dies tun, setq
ist es nicht das Richtige. Wenn Sie also Lisp-Code verwenden möchten und nicht die Benutzeroberfläche anpassen, um Ihre Optionen festzulegen, sollten Sie stattdessen custom-set-variables
oder customize-set-variable
verwenden setq
. Es tut nie weh und hilft manchmal (sehr).
Ich empfehle jedoch, beides zu tun:
Verwenden Sie dazu die Benutzeroberfläche zum Anpassen, anstatt Lisp-Code zu schreiben.
Definieren Sie eine Variablecustom-file
, damit Customize Anpassungen in diese Datei und nicht in Ihre Init-Datei ( ~/.emacs
) schreibt . IOW, halten Sie Ihren handgeschriebenen Initialisierungscode von dem von Customize geschriebenen automatischen Code getrennt.
:type
mit verwendendefvar
- ich denke nicht, dass dies auf Benutzeroptionen beschränkt sein sollte. Leider sind viele Programmierer faul im Umgang mit:type
und das Ergebnis ist nicht sehr hilfreich (das liegt nicht an Customize).Ich ziehe es
setq
übercustomize
aus mehreren Gründen:(setq foo (calculate-foo))
). Ich benutze diese Kraft die ganze Zeit in meiner Konfiguration, um die Dinge trocken zu halten. Der springende Punkt bei der Verwendung von Emacs ist für mich die Programmierbarkeit, und diecustomize
Benutzeroberfläche stellt sich nur in den Weg.setq
eignet sich besser für die Versionskontrolle und Code-Organisation. Ich habe meine Initialisierung auf Dutzende von Dateien aufgeteilt. Wenn alles in einer großencustom.el
Datei wäre, wäre es viel schwieriger, Einstellungen schnell zu finden und zu bearbeiten.customize
fühlt sich die gesamte Oberfläche wie ein schreckliches Relikt der schlimmsten Benutzeroberflächen der 90er an. Ich würde es vorziehen, jeden Tag Text mit der Kraft von Emacs zu bearbeiten.@Drew macht einige gute Punkte über einige Feinheiten mit
:set
und:initialize
. Ich benutze Emacs seit Jahren und bin selten auf solche Probleme gestoßen. Wenn ich das tue, ist es einfach zu tauschensetq
fürcustom-set-variable
in bestimmten Fällen.quelle
customize-set-variable(s)
aufgrund der automatisch ausgeführten Trigger besser. 2. Sie können verschiedene Anpassungsbefehle verwenden, um alle Ihre festgelegten und / oder gespeicherten Variablen in verschiedenen Hierarchien anzuzeigen, sodass Sie die Organisation verschiedener Gruppen automatisch erhalten, ohne separate Dateien in der Versionskontrolle verwenden zu müssen. 3. Es ist viel besser geworden. Wenn Ihnen die Benutzeroberfläche nicht gefällt, können Sie das Anpassen dennoch programmgesteuert und über interaktive Befehle, die den Anpassungsmodus umgehen, verwenden, um alle anderen Vorteile der Verwendung des Anpassungsmodus zu nutzen.Ein Vorteil der Verwendung
setq
anstelle voncustomize
ist die Lesbarkeit. Es steht Ihnen frei, jede Anpassung nach Ihren Wünschen zu kommentieren, wodurch IMO die Lesbarkeit verbessert. Sie können auch zusammengehörige Anpassungen gruppieren, um die Modularität zu verbessern. Schließlich würde ich argumentieren, dass das Navigieren durch einen Elisp-Puffer "einfacher" ist als das Navigieren in benutzerdefinierten Benutzeroberflächen und Widgets.Andererseits können Sie mit „Anpassen“ ganz einfach auf Standardwerte zurückgreifen, die von unschätzbarem Wert sein können, wenn etwas schief geht.
BEARBEITEN: Drews Antwort bietet einen guten Grund für die Verwendung,
customize-set-variables
der alle Vorteile bietet, auf die ich hingewiesen habe. Die Benutzeroberfläche zum Anpassen eignet sich jedoch nicht so einfach für tragbare Konfigurationen auf verschiedenen Plattformen wie Raw Elisp. Wenn Sie für eine Variable eine os-abhängige Einstellung benötigen, müssen Sie in vielen Fällen auf elisp zurückgreifen. Mein Punkt zur einfacheren Navigation in Elisp-Puffern bleibt bestehen.quelle
setq
, indem Sie diesetq
Zeile auskommentieren und emacs neu starten.custom-set-variables
ist "raw elisp" und ich benutze es jeden Tag auf mehreren Maschinen. Kopieren Sie es einfach von der Stelle, an der customise es schreibt (wenn Sie es nicht selbst geschrieben haben).Eine weitere Alternative ist John Wiegley zu gebrauchen use-Paket . Dies bietet eine programmgesteuerte Möglichkeit zum Konfigurieren von Paketen, die mit dem Paketinitialisierungsprozess von emacs 24+ problemlos funktioniert. Hier ist ein Anwendungsbeispiel aus der Readme:
Der Punkt ist, dass use package ein Makro ist und seine Argumente nicht sofort auswertet. Die Parameter
:init
und:config
werden in verschiedenen Phasen des Initialisierungsprozesses ausgewertet, sodass die Konfiguration jedes Pakets an einem Ort erfolgen kann, wobei jedoch jeder Teil in der entsprechenden Phase der Initialisierung ausgeführt wird.Ohne so etwas wie
use-package
benötigen einige Pakete einen Teil ihres Initialisierungscodes, um vor(package-initialize)
und einen anderen Teil, um nach zu gehen. Wenn Sie so viele Packegas haben, müssten deren Initialisierungen verschachtelt werden.Ein weiterer Vorteil von
use-package
ist, dass fehlende Pakete mithilfe von package.el automatisch installiert werden können, wenn Sie .emacs auf einen neuen Computer übertragen oder wenn Sie Ihre Konfiguration für einen anderen Benutzer freigeben und die gesamte Initialisierung aufgeschoben werden kann, bis ein Paket tatsächlich geladen werden muss.Es gibt auch zusätzliche Schlüsselwortargumente, mit denen Sie den Initialisierungsprozess besser steuern können.
Alles in allem ist ein großer Vorteil des Anpassens, dass es Ihnen zeigt, was in einem bestimmten Paket konfiguriert werden muss. Das ist ein Grund, warum ich es immer noch für viele meiner Pakete benutze.
quelle
use-package
selbst bietet die Vorteile einer modularisierten Konfiguration und des Importierens und Konfigurierens von Paketen an einem Ort. Aber ja, das Beispiel verwendetsetq
. Könnte es hier genauso gut genutztcustomize-set-variable
haben? Ich bin mir nicht sicher. Könnten / sollten wir es (odercustomize-set-value
) für tauschensetq
?:custom
Schlüsselwort verwendet.