У меня это по умолчанию в моем auto-mode-alist
:
("\\.js\\'" . javascript-mode)
(даже с emacs -Q
). Я хотел бы заменить js2-mode
на javascript-mode
. Конечно, я мог бы использовать, assq-delete-all
а потом add-to-list
снова, но мне интересно, нет ли лучшего способа.
Редактировать: Я явно не хочу использовать Customize, я предпочитаю создавать свои собственные init.el
.
elisp
association-lists
mbork
источник
источник
Используйте
setf
для изменения значения на месте:Если вы хотите заменить значение в списке, то
setf
это обобщенный механизм, который вам необходим для этого. Для более идиоматического способа справиться сauto-mode-alist
, см. Ответ @ Drew (и его объяснение затенения).источник
setf
действительно должна быть показана ребятам из Java.)setf
все время используется в Common Lisp, но вы сталкиваетесь с этим гораздо реже в elisp.setf
так редко, по сравнению с CL ...Вероятно, самый быстрый способ изменить ячейку минуса
setcdr
Стоит отметить, что
setf
недоступен в более старых Emacsen, ноsetcdr
есть.источник
setf
?OP запрашивает решение, которое обрабатывает списки, которые имеют строковые ключи. Чтобы справиться с этим, посмотрите на этот вопрос . Если случайно вам нужно обрабатывать только списки с символьными клавишами, то, начиная с Emacs 25, вы можете использовать:
заменить CDR. Если у вас есть доступ к Emacs 26, этот метод работает со строковыми ключами следующим образом:
Обратите внимание, что в Emacs 26 есть и другие способы обработки строковых ключей; см. этот вопрос, как указано выше.
источник
(setf (alist-get "\\.js\\'" auto-mode-alist nil nil #'equal) 'js2-mode)
должно работать (требуется Emacs 26, хотя).alist-get
строку"\\.js\\'"
, ноalist-get
она основана на томassq
, что она не будет работать со строкой, как вы утверждаете в своем ответе.Если вы знаете, что больше не будете использовать javascript-mode, оставьте auto-mode-alist без изменений и добавьте его в свой init.el
источник
javascript-mode
, на самом деле:javascript-mode
это только псевдоним дляjs-mode
(по умолчанию), и это было сделано именно так, чтобы пользователи могли делать то, что вы предлагаете, если они предпочитаютjs2-mode
(без потери возможности использовать,js-mode
если они этого хотят).js-mode
(в отличие от того, что происходитperl-mode
, например).