Emacs: dolist не работает с точкой

350
xuhdev

Я новичок в Emacs. Я намерен использовать sh-modeнесколько шаблонов имен файлов, поэтому я добавил следующие строки ~/.emacs.d/init.el:

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

Тем не менее, он показывает следующую ошибку:

Определение функции символа недействительно: шаблон

Если я использую:

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

pattern добавляется в список, но не те, что в списке.

Кто-нибудь может мне помочь? Спасибо!

1
Проблема в последней строке - `... (pattern` Если вы поставите скобки перед` pattern`, Emacs решит, что вы хотите вызвать функцию с именем `pattern`. Выполните поиск в Google для` add-to-list` `dolist`` emacs` - вы должны увидеть хотя бы несколько примеров того, как это сделать - например, http://stackoverflow.com/a/221449/2112489 lawlist 10 лет назад 1
Вот ссылка на ветку, где lunaryorn научил меня использовать обратный тик (вместо апострофа) для переменных в списке, а также ставить запятую перед переменной: http://stackoverflow.com/a/22440553/2112489 lawlist 10 лет назад 2

1 ответ на вопрос

3
xuhdev

Решение:

(dolist (pattern '("\\.zsh$" "\\.?zshrc$" "zshrc\\.")) (add-to-list 'auto-mode-alist `(,pattern . sh-mode))) 
Почему этот синтаксис необходим / почему не работает `(cons pattern 'sh-mode)`? binki 9 лет назад 0
Ой, извините, `(cons pattern 'sh-mode)` работает. Все это время я пропускал последнюю закрывающую скобку и пытался выполнить только бит `(add-to-list ...)` напрямую, поэтому, конечно, `pattern` был бы для меня неопределенным xD. binki 9 лет назад 0

Похожие вопросы