尽管安装了 sml-mode,但 Emacs 无法识别 SML 语法

SML syntax is not recognised in Emacs despite having installed sml-mode

我已经在 Emacs(版本 26.2)中安装了包 sml-mode(版本 6.9),但是当我尝试打开 .sml 文件时,我在迷你缓冲区:File mode specification error: (invalid-read-syntax ?)。因此,编辑器无法识别 SML 语法,这也清楚当前模式显示 SML 以外的 Fundamental 模式。

这些是我设置环境的步骤:

使用 M-x toggle-debug-on-error 给出以下堆栈跟踪:

Debugger entered--Lisp error: (invalid-read-syntax "?")
read(#<buffer  *load*>)
eval-buffer(#<buffer  *load*> nil "/home/Roberto/.emacs.d/elpa/sml-mode-6.9/sml-mode.el" nil t)  ; Reading at buffer position 9890
load-with-code-conversion("/home/Roberto/.emacs.d/elpa/sml-mode-6.9/sml-mode.el" "/home/Roberto/.emacs.d/elpa/sml-mode-6.9/sml-mode.el" nil t)
sml-mode()
set-auto-mode-0(sml-mode nil)
set-auto-mode()
normal-mode(t)
after-find-file(t t)
find-file-noselect-1(#<buffer test.sml> "~/test.sml" nil nil "~/test.sml" nil)
find-file-noselect("~/test.sml" nil nil t)
find-file("~/test.sml" t)
funcall-interactively(find-file "~/test.sml" t)
call-interactively(find-file nil nil)
command-execute(find-file)

也许 M-x package-list-packages 确实安装成功 sml-mode,但随后没有加载。

你能确认目录 ~/.emacs.d/elpa/sml-mode-6.9 存在吗?

我对 sml-mode 的唯一配置是软件包安装程序添加的内容:

(require 'package)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("marmalade" . "https://marmalade-repo.org/packages/")
        ("melpa" . "http://melpa.org/packages/")))
(package-initialize)

...

(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 ...
 '(package-selected-packages
   (quote
    (... sml-mode ...))))

这应该以某种方式到达文件 ~/.emacs.d/elpa/sml-mode-6.9/sml-mode-autoloads.el,这使得 sml-mode 在打开正确类型的文件时加载。

也许,您是否也可以确认 sml-mode 在您的 .emacs 文件中也有类似提及?

我成功地使用了 Emacs 25 和 sml-mode-6.7,除了你所做的,我什么都没做。如果我升级到 sml-mode-6.9,这个设置仍然有效。不幸的是,我无法测试它是否也适用于 Emacs 26。不幸的是,我不能说 25 和 26 之间是否存在任何可以在这里播放的包管理器差异。

报错信息说文件中9890位置有错误。它就在 lambda 字符旁边:

  '(("fn" . ?λ)

由于这是文件中的第一个非 ASCII 字符,我猜该文件是用乱码编码或其他方式下载的。不确定为什么 M-x list-packages 对您不起作用 - 我想您可以通过手动编辑文件来解决这个问题。与 this version on Github 比较,看看应该出现哪些字符。