尽管安装了 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
模式。
这些是我设置环境的步骤:
- 我首先在
usr/local/sml
. 安装了 smlnj
- 我已尝试安装预设
sml-mode
软件包 (M-x list-packages)。然而这并没有奏效。
- 然后我在我的机器上从 https://elpa.gnu.org/packages/sml-mode.html 下载了
sml-mode-6.9.el
的内容并将其安装在 Emacs 上(M-x package-install-file)。
- Emacs 中的软件包列表在
sml-mode
软件包旁边显示 Installed,但显然不起作用。
使用 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 比较,看看应该出现哪些字符。
我已经在 Emacs(版本 26.2)中安装了包 sml-mode(版本 6.9),但是当我尝试打开 .sml 文件时,我在迷你缓冲区:File mode specification error: (invalid-read-syntax ?)
。因此,编辑器无法识别 SML 语法,这也清楚当前模式显示 SML
以外的 Fundamental
模式。
这些是我设置环境的步骤:
- 我首先在
usr/local/sml
. 安装了 smlnj
- 我已尝试安装预设
sml-mode
软件包 (M-x list-packages)。然而这并没有奏效。 - 然后我在我的机器上从 https://elpa.gnu.org/packages/sml-mode.html 下载了
sml-mode-6.9.el
的内容并将其安装在 Emacs 上(M-x package-install-file)。 - Emacs 中的软件包列表在
sml-mode
软件包旁边显示 Installed,但显然不起作用。
使用 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 比较,看看应该出现哪些字符。