关于 auto-mode-alist

目前每次打开 .m 文件,都会提示是否加载 octave layer,但是这个不是我想要的,我想以 objc-mode 方式加载,查看了 auto-mode-alist 发现了里面有设置默认使用octave-mode 加载 .m 文件。

我在自己 layer 的 config.el 中添加了:

(setq auto-mode-alist 
      '(delq '("\\(\\.m\\'\\)" lambda nil (configuration-layer//auto-mode 'octave 'octave-mode)) auto-mode-alist))

然而没有用…可能因为这个 layer 是个 lazy load,每次 lazy load 的时候,自己又添加了。还是因为上面原因?这个怎么破?

附上 octave-layer 的 packages 初始化:

(defun octave/init-octave ()
  (use-package octave
    :mode ("\\.m\\'" . octave-mode)
    :commands (run-octave)
    :init (spacemacs/register-repl 'octave 'run-octave "octave")
    :config (spacemacs/set-leader-keys-for-major-mode 'octave-mode
          ;; helpers
          "hh" 'octave-help
          "hi" 'octave-lookfor
          ;; REPL
          "'" 'run-octave
          "sb" 'octave-send-buffer
          "sf" 'octave-send-defun
          "si" 'run-octave
          "sl" 'octave-send-line
          "sr" 'octave-send-region)))
(defun xxx/post-init-octave ()
(setq xxxxxxxx..... ))

用这样的形式放在自己的layer里。

lisp语句怎么写,貌似没用…

啧。

(setq auto-mode-alist (cons '("\\.m\\'" . objc-mode)
(delq (assoc "\\.m\\'" auto-mode-alist) auto-mode-alist)))

试试这个。


忽然很好奇你是怎么想出来开头那段代码的。:sweat_smile:

在这个地方贴一个根据内容自动加载matlab-mode或objc-mode的配置。

你的方法没有起效,开头代码是我查看 auto-mode-alist 后把里面关于 octave-mode 的粘过来的。

这是什么意思?要自己把这个下下来,然后再改这个吗?

没,这个只是一个方法呢,仅用于你同时需要两个模式。如果你只需要objc-mode的话,还是用他们教你的直接修改auto-mode-alist简单。

在 lisp-interaction-mode 运行这个代码,看看 auto-mode-alist 有没有变化。auto-mode-alist 是一个列表,emacs 从里面找符合文件名的正则对应的 mode 来加载。如果运行后 auto-mode-alist 发生变化,打开文件也能加载正确的 mode,那么就是你没有把lisp 代码放到正确的加载位置。试试把代码放在 user-config 里面。

直接运行后,auto-mode-alist 不是预期的,所以应该是操作 list 的代码有问题,elisp还不太熟,我看一下正则匹配这块吧.

应该直接去掉这一句就完了,它不是你想要的。

这样就修改了 .emacs.d 里 git 管理的东西,不想这么改

删掉对 .m 文件开启 octave-mode 用:

(setq auto-mode-alist
      (delete '("\\.m\\'" . octave-mode) auto-mode-alist))

确保在 octave/init-octave 之后执行。

在别的地方重新写一个`use-package

最近切换到了develop分支, 发现如下代码:

(setq auto-mode-alist
   (delete '("\\.m\\'" . octave-mode) auto-mode-alist))

可以正常删除 auto-mode-alist 里的值。最近工作较忙,master分支原因还没有细查