回答:
@Danの答えは完全に素晴らしい解決策ですが、それは不要です。ここでEmacsがalistを使用する理由の1つは、alistを使用すると、リストの先頭に新しい要素を追加するだけで、リストのさらに下の一致をシャドーするためです。
(add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode))
使用setf
して値を変更します:
(setf (cdr (rassoc 'javascript-mode auto-mode-alist)) 'js2-mode)
リスト内の値を置き換えたい場合setf
は、そうする必要がある一般的な機械です。を扱うより慣用的な方法については、auto-mode-alist
@ Drewの回答(およびシャドウイングの説明)を参照してください。
setf
をJavaの人たちに実際に示す必要があります。)
setf
Lispでは常に使用されていますが、elispではあまり頻繁に実行されません。
setf
CLに比べ、そうめったに...
コンスセルを実際に変更する最速の方法はおそらく setcdr
setcdr is a built-in function in `C source code'.
(setcdr CELL NEWCDR)
Set the cdr of CELL to be NEWCDR. Returns NEWCDR.
setf
古いEmacsenでは使用できないことに注意してくださいsetcdr
。
*** Welcome to IELM *** Type (describe-mode) for help.
ELISP> (setq tmp '((one . 1) (two . 2) (three . 4)))
((one . 1)
(two . 2)
(three . 4))
ELISP> (setcdr (assq 'three tmp) 3)
3 (#o3, #x3, ?\C-c)
ELISP> tmp
((one . 1)
(two . 2)
(three . 3))
setf
か知っていますか?
OPは、文字列キーを持つリストを処理するソリューションを求めています。それを処理するには、この質問を参照してください。偶然にシンボルキーを持つリストを処理する必要がある場合、Emacs 25の時点では次を使用できます。
(setf (alist-get <key> <alist>) <value>)
cdrを置き換える。Emacs 26にアクセスできる場合、この手法は次のように文字列キーで機能します。
(setf (alist-get "\\.js\\'" auto-mode-alist nil nil #'equal) 'js2-mode)
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に追加します。
(defalias 'javascript-mode 'js2-mode "Some handy explanation goes here.")
javascript-mode
ん:( デフォルト)のjavascript-mode
エイリアスにすぎず、ユーザーが希望する場合は(必要に応じて使用する機能を失うことなく)ユーザーが提案できるように、特にjs-mode
この方法で行われました。js2-mode
js-mode
js-mode
(perl-mode
たとえば、