子龙山人配置 .spacemacs 奇怪的副作用

我在看第二季02视频的时候,子龙山人更改 auto-mode-alist 来实现默认用 js2-mode 打开 *.js 文件。 我进行了一点修改,默认使用 matlab-mode 打开 .m 文件,代码如下:

  (require 'matlab-mode)
  (setq auto-mode-alist
        (append
         '(("\\.m\\'" . matlab-mode))
         auto-mode-alist))

代码功能正常实现,确实再打开.m文件时使用的是matlab-mode

但是奇怪的是,在这个代码块下,所有的 defun 代码都没被执行。例如:

  (require 'matlab-mode)
  (setq auto-mode-alist
        (append
         '(("\\.m\\'" . matlab-mode))
         auto-mode-alist))

  ;; Open file's parent directory
  (defun my-file-up-directory ()
    (interactive)
    (if default-directory
        (dired (expand-file-name default-directory))
      (error "No `default-directory' to open")))

以上代码放在dotspacemacs/user-init下,则 my-dired-up-directory 函数不会被定义,M-x 中找不到这个函数。 如果把 my-dired-up-directory 放在那段代码块上面就没关系。

求问这是什么情况?

spacemacs 的黄金准则——不要把 (require 'xxx) 放在 user-init 里

哈哈,我自己瞎掰的,但是 spacemacs 的作者确实说过类似的话。

user-config 是个更好的去处。

Good to know! 但是请问这个 side effect 是由于 require 产生的吗?