F: Wie kann ich neue Puffer erhalten , um die Zuordnung zu berücksichtigen auto-mode-alist
?
Beim Auffinden einer Datei vergleicht Emacs die Dateierweiterung mit der, auto-mode-alist
um festzustellen, welcher Hauptmodus für den Dateipuffer verwendet werden soll. Gibt es eine Möglichkeit, die Informationen in auto-mode-alist
zu verwenden, um den Modus für einen Puffer zu bestimmen, dem (noch) keine Datei zugeordnet ist?
Das heißt: Wenn ich einen neuen Puffer öffne, dessen Name wie eine Dateierweiterung aussieht, kann ich dann veranlassen, dass er automatisch im erwarteten Modus geöffnet wird? Wenn ich beispielsweise einen neuen Puffer öffne a-new-buffer.el
, der noch keiner Datei zugeordnet ist, soll er nicht emacs-lisp-mode
im Standardmodus geöffnet werden.
quelle
auto-mode-alist
, dass der Puffer die Datei " besucht " (und das erledigt alles).org
Puffer zum Testen neuer Funktionen, in denen ich schreibeorg-mode
; b) einen temporärenR
Puffer, um einige schnelle, wegwerfbare statistische Manipulationen durchzuführen; c) einen temporären Textpuffer zum Verfassen einer E-Mail. In jedem Fall möchte ich keine zu besuchende Datei erstellen, sondern nur einen Wegwerfpuffer, der sich dennoch im entsprechenden Modus öffnet.C-x C-f
sie nicht „ erstellen Sie eine Datei zu Besuch “. Das ist ein grundlegendes Missverständnis. Sie machen einfach genau das, wonach Sie suchen. Es ist nur , wenn und wenn Sie versuchen, den Puffer zu speichern , dass eine Datei erstellt wird. Wenn Sie nicht versuchen, den Puffer zu speichern, wird keine Datei erstellt. Soweit ich weiß, möchten Sie "eine Datei besuchen" (was wirklich bedeutet, einen Puffer im richtigen Modus zu öffnen).Antworten:
C-x C-f
Dateibesuchsbefehle wie erstellen keine zu besuchende Datei . Sie tun, wonach Sie suchen.Nur wenn Sie versuchen, den Puffer zu speichern , wird eine Datei erstellt .
Wenn Sie nicht versuchen, den Puffer zu speichern, wird keine Datei erstellt. Soweit ich weiß, möchten Sie " eine Datei besuchen " (was wirklich bedeutet, einen Puffer im richtigen Modus zu öffnen).
quelle
n
um nicht zu speichern, oder ich speichere (oft) nur den Puffer. Und später werfe ich die erstellte Datei ... oder nicht.)*scratch*
: Sie werden aufgefordert, zu speichern, wenn dieser Finger automatisch trifftC-x C-s
.Ich verwende die Lösung von Juri Linkov seit Jahren.
Ich erstelle temporäre Puffer mit so etwas wie
C-x
b
test.org
C-j
. Diemajor-mode
wird durch die Dateierweiterung über bestimmtauto-mode-alist
.Um den Effekt zu testen, können Sie versuchen
(prog1 (and (switch-to-buffer "my-new.org") major-mode) (kill-buffer "my-new.org"))
=>
org-mode
. In einem sauberen würdeemacs -q
der Test zurückkehrenfundamental-mode
.quelle
advice
Option, die ich verwendet hatte. Ich bin mir nicht sicher, wofür der(prog1...)
Teil ist, aber der(setq-default major-mode ...)
Teil ist ganz nett.prog1
-test zeigt nur, dass Siemajor-mode
beim Umschalten auf einen Puffer die erwarteten Ergebnisse erhalten. Bewerte dassetq-default
Teil und führe den Test aus. Es wird zurückkehrenorg-mode
Ohne dassetq-default
würde es zurückkehrenfundamental-mode
.Hat einen beratungsbasierten Weg gefunden, indem Ideen aus @ Drews Kommentaren und @ glucas 'Antwort verwendet wurden, die ich hier aufzeichnen werde, falls sie für irgendjemanden nützlich sind.
Die Kurzversion:
after
Fragen Sie mit Hilfe von Anweisungen ab, ob dem Puffer ein Dateiname zugeordnet ist, und legen Sie einen temporären Namen fest, falls dies nicht der Fall ist. Lassen Sie dann den Rest derset-auto-mode
Maschine die Details erledigen. Nach einigem Testen (nicht umfangreich) scheint es gut zu funktionieren.Für
ido-switch-buffer
und Vanilleswitch-to-buffer
wären die beiden Ratschläge:Ich finde diese Option zusätzlich zu dem
find-file
Punkt hilfreich , den @Drew ausgelöst hat, weil meine Finger meinem Gehirn einen Schritt voraus sind: Das Muskelgedächtnis versetzt mich oft in ein Gebiet, in das ich in den Puffer wechseln kann, bevor mir völlig einfällt, dass esfind-file
das tut, was ich brauche. Jetzt sind beide Optionen verfügbar.UPDATE: kleiner, aber möglicherweise irritierender Fehler im obigen Code: Bei jedem Wechsel wird der Modus-Hook des Puffers erneut ausgeführt. Das Folgende gibt einen tatsächlichen Dateinamen aus dem
/tmp
Verzeichnis und vermeidet dieses Problem:quelle
Das
set-auto-mode
Funktion legt den Modus basierend auf der Datei fest, die einem Puffer zugeordnet ist. Hier ist eine Funktion, die vorübergehend anhandbuffer-file-name
des Puffernamens festgelegt wird, um den Modus festzulegen:Sie können dies ausführen, wenn ein Puffer mit dem folgenden Hinweis umbenannt wird:
Ich bin mir nicht sicher, wo ich dies am besten einhängen kann, um neue Puffer zu beeinflussen. Hier benutze ich das
buffer-list-update-hook
, aber das wird in mehr Fällen aufgerufen, als wir brauchen.quelle
buffer-list-update-hook
weil daschange-major-mode-hook
nicht mit dem erwarteten aktuellen Puffer aufgerufen wurde. Für die Aufzeichnung ist es wahrscheinlich sinnvoller, Ihre Switch-Buffer-Funktion zu empfehlen, wie dies @Dan in seiner Antwort tut.Sie können * scratch * -Puffer verwenden, um temporäre Puffer zu erstellen, die denselben Hauptmodus wie die Datei haben, an der Sie möglicherweise arbeiten.
Hier eine Antwort von emacs SE, die Ihr Problem lösen könnte:
Wie kann ich schnell zwischen einer Datei und einem * scratch * -Puffer mit demselben Hauptmodus wechseln?
Die referenzierte Frage und Antwort wurden beide von mir gepostet. Die Antwort in der Funktion bewirkt Folgendes:
*scratch-X-mode*
falls noch keiner vorhanden ist, und zu diesem neu erstellten Puffer gewechselt.*scratch-X-mode*
bereits vorhanden, wird einfach auf diesen Puffer umgeschaltet.quelle
Hier gibt es einige gute Antworten, aber ich wollte noch etwas hinzufügen. Emacs hat eine Menge Funktionen und es gibt oft mehrere Möglichkeiten, etwas zu tun. Sie können Tags am Anfang jeder Datei hinzufügen, die unabhängig von der Erweiterung angeben, welcher Typ sie hat. Zum Beispiel dies hinzufügen:
Am Anfang einer Datei wird Emacs wissen lassen, dass es sich auch ohne die
.py
Erweiterung um eine Python-Datei handelt . Beachten Sie, dass der#
Anfang der Zeile ein Kommentar im Python-Stil ist. Für verschiedene Dateitypen können Sie verschiedene Kommentare verwenden. Um beispielsweise eine Lisp-Datei anzugeben, die Sie;
zum Starten einer Kommentarzeile und zum Festlegen des Modus in Emacs verwenden, gehen Sie wie folgt vor:Siehe Angeben von Dateivariablen und Auswählen von Dateimodi .
quelle
switch-buffer
) und das automatische Einstellen des Modus auf etwas anderes alsfundamental-mode
.