Emacs: Dolist arbeitet nicht mit Punkt

465
xuhdev

Ich bin neu bei Emacs. Ich habe vor, sh-modeeinige für Dateinamensmuster zu verwenden, deshalb habe ich folgende Zeilen hinzugefügt ~/.emacs.d/init.el:

(dolist (pattern '("\\.zsh$" "\\.?zshrc$" "zshrc\\.")) (add-to-list 'auto-mode-alist (pattern . sh-mode))) 

Es zeigt jedoch den folgenden Fehler:

Die Funktionsdefinition des Symbols ist nichtig: Muster

Wenn ich benutze:

(dolist (pattern '("\\.zsh$" "\\.?zshrc$" "zshrc\\.")) (add-to-list 'auto-mode-alist '(pattern . sh-mode))) ;; Note the additional quote 

pattern wird der Liste hinzugefügt, nicht jedoch die Liste.

Kann mir jemand helfen? Vielen Dank!

1
Das Problem ist die letzte Zeile - "..." (Muster) Wenn Sie vor "Muster" Klammern setzen, möchte Emacs eine Funktion namens "Muster" aufrufen. Suchen Sie eine Google-Suche nach "Add-to-List" `dolist`` emacs` - Sie sollten mindestens einige Beispiele dafür finden, z. B. http://stackoverflow.com/a/221449/2112489 lawlist vor 10 Jahren 1
Hier ist ein Link zu einem Thread, in dem Lunaryorn mich gelehrt hat, das Backtick (anstelle eines Apostroph) für Variablen in einer Liste zu verwenden, und außerdem ein Komma vor der Variablen eingefügt: http://stackoverflow.com/a/22440553/2112489 lawlist vor 10 Jahren 2

1 Antwort auf die Frage

3
xuhdev

Lösung:

(dolist (pattern '("\\.zsh$" "\\.?zshrc$" "zshrc\\.")) (add-to-list 'auto-mode-alist `(,pattern . sh-mode))) 
Warum ist diese Syntax notwendig / warum funktioniert '(cons pattern' sh-mode) 'nicht? binki vor 9 Jahren 0
Oh, Entschuldigung, `(cons pattern 'sh-mode)` funktioniert. Während dieser ganzen Zeit habe ich die letzte schließende Klammer vermisst und versucht, einfach das `(Add-to-List ...)` Bit direkt auszuführen, also wäre 'Muster' für mich xD undefiniert. binki vor 9 Jahren 0