Mam to domyślnie w moim auto-mode-alist
:
("\\.js\\'" . javascript-mode)
(nawet z emacs -Q
). Chciałbym podstawić js2-mode
za javascript-mode
. Oczywiście, mogę używać assq-delete-all
, a następnie add-to-list
ponownie, ale zastanawiam się, czy nie ma lepszego sposobu.
Edycja: wyraźnie nie chcę używać opcji Dostosuj, wolę tworzyć init.el
własne.
elisp
association-lists
Mbork
źródło
źródło
Użyj,
setf
aby zmienić wartość na miejscu:Jeśli chcesz zastąpić wartość na liście,
setf
to musisz uogólnić maszynę. Aby uzyskać bardziej idiomatyczny sposób radzenia sobie zauto-mode-alist
, zobacz odpowiedź @ Drew (i jego wyjaśnienie dotyczące cieniowania).źródło
setf
móc, powinien być naprawdę pokazanysetf
jest używany przez cały czas w Common Lisp, ale w elisp spotykasz go o wiele rzadziej.setf
tak rzadko używa , w porównaniu do CL ...Najszybszym sposobem na faktyczną zmianę komórki przeciwnej jest prawdopodobnie
setcdr
Warto zauważyć, że
setf
nie jest dostępne w starszych Emacsen, alesetcdr
jest.źródło
setf
?OP prosi o rozwiązanie, które obsługuje listy zawierające klucze łańcuchowe. Aby sobie z tym poradzić, zobacz to pytanie . Jeśli przypadkiem potrzebujesz tylko obsługiwać listy przy pomocy klawiszy symboli, to od Emacsa 25 możesz użyć:
zastąpić cdr. Jeśli masz dostęp do Emacsa 26, ta technika działa z następującymi kluczami:
Zauważ, że w Emacsie 26 istnieją również inne sposoby obsługi kluczy ciągów; zobacz to pytanie, jak wspomniano powyżej.
źródło
(setf (alist-get "\\.js\\'" auto-mode-alist nil nil #'equal) 'js2-mode)
powinien działać (wymaga Emacsa 26).alist-get
łańcucha"\\.js\\'"
, alealist-get
jest oparty naassq
, więc nie będzie działać z łańcuchem, jak twierdzisz w odpowiedzi.Jeśli wiesz, że już nigdy nie użyjesz trybu javascript, pozostaw auto-mode-alist nietknięty i dodaj do pliku init.el
źródło
javascript-mode
, naprawdę:javascript-mode
jest tylko aliasemjs-mode
(domyślnie) i zostało to zrobione specjalnie po to, aby użytkownicy mogli robić to, co sugerujesz, jeśli woląjs2-mode
(bez utraty możliwości używania,js-mode
jeśli chcą).js-mode
(na przykład w przeciwieństwie do tego, co się dziejeperl-mode
).