【问题标题】:ESS[SAS] F3 button and "File Mode Specification error: (void-variable ess-ac-sources)"ESS[SAS] F3 按钮和“文件模式规范错误:(void-variable ess-ac-sources)”
【发布时间】:2013-10-03 00:31:23
【问题描述】:

我一直在寻找这个问题的答案/解决方案。我不确定它是如何发生的或我做了什么(如果有的话),但是当我按 F3 以在 ESS[SAS] 模式下为 SAS 运行批处理文件时,它不起作用。我一整天都在使用它,但它突然不再工作了......如果我在SAS-mode 中调用M-x ess-sas-global-unix-keys,我可以使用F3-F6 按钮,但在我的init.d 文件中有(setq ess-sas-global-unix-keys t)打开.sas 文件时不会将 F3-F6 绑定到必要的命令。

此外,当我现在打开 .sas 文件时,我收到消息“文件模式规范错误:(void-variable ess-ac-sources)”并且 F3-F6 键绑定在 @987654329 中不再起作用@。

我检查以确保我的所有内容都是最新的(一切似乎都是:即自动完成,ess),我使用M-x toggle-debug-on-error 进行了调试,但我找不到问题所在(不是我一定会知道我在寻找什么,我还是 Emacs 的新手)。

在我的 init.el 文件中,我对 ESS 的唯一引用是 ess-sas-global-unix-keys。我觉得规范错误对 ESS[SAS] 键绑定有影响,但我不知道如何修复它。即使我整天都在使用它,我也不知道为什么它才开始发生。我能做什么?

编辑:

根据 cmets,我将向 ESS 帮助邮件列表发送一封电子邮件,并列出来自 debug-on-error 的回溯列表。

Debugger entered--Lisp error: (void-variable ess-ac-sources)
  ess-load-extras()
  ess-mode(((ess-local-customize-alist quote SAS-customize-alist) (ess-language . "SAS") (ess-dialect . "SAS") (ess-mode-editing-alist . SAS-editing-alist) (ess-mode-syntax-table . SAS-syntax-table) (inferior-ess-program . inferior-SAS-program-name) (ess-help-sec-regex . "^[A-Z. ---]+:$") (ess-help-sec-keys-alist . " ") (ess-object-name-db-file . "ess-sas-namedb.el") (inferior-ess-objects-command . "objects(%d)") (inferior-ess-help-command . "help(\"%s\",pager=\"cat\",window=F)\n") (inferior-ess-exit-command . "endsas;\n") (ess-loop-timeout . 500000) (inferior-ess-primary-prompt . "^") (inferior-ess-secondary-prompt . "^") (comint-use-prompt-regexp . t) (inferior-ess-start-file) (inferior-ess-start-args . inferior-SAS-args-temp) (inferior-ess-font-lock-defaults . SAS-mode-font-lock-defaults)) nil)
  SAS-mode()
  set-auto-mode-0(SAS-mode nil)
  set-auto-mode()
  normal-mode(t)
  after-find-file(nil t)
  find-file-noselect-1(#<buffer cleaning-0yr.sas> "~/Documents/datasets/PROMISE/data/scripts/cleaning-0yr.sas" nil nil "~/Documents/datasets/PROMISE/data/scripts/cleaning-0yr.sas" (5673145 2049))
  find-file-noselect("~/Documents/datasets/PROMISE/data/scripts/cleaning-0yr.sas" nil nil t)
  find-file("~/Documents/datasets/PROMISE/data/scripts/cleaning-0yr.sas" t)
  call-interactively(find-file nil nil)

【问题讨论】:

  • 请发送邮件至 ess help mailing list 并描述工作流程以及您正在使用的 ESS 和 emacs 版本。您将在那里获得更多帮助。
  • 我不熟悉 ESS,但我可以知道错误的含义:ess-ac-sources 是一个变量,其中包含为 auto-complete 库制作的特殊列表;然后这个库将使用它来决定如何完成文件中的单词。可能会发生什么? - 来源的名称通常遵循不同的模式。通常是ac-sources-ess。这可能只是源代码中的错字吗?试试M-: (setq debug-on-error t),重新运行有问题的代码并告诉我们是什么函数导致了问题。
  • @wvxvw 违规代码是ess-load-extras()
  • 您可能希望将堆栈跟踪添加到问题中。我只是真的不熟悉这个包,但也许有人能够更好地回复。
  • 我看过这里:svn.r-project.org/ESS/trunk/lisp/ess.el,这似乎是一个错误,因为auto-completeess 本身都没有定义这个变量。所以我会把它作为一个错误报告给维护者,并将(defvar ess-ac-sources nil)添加到.emacs文件中,直到它被修复。

标签: emacs sas key-bindings ess


【解决方案1】:

不知道发生了什么,因为我以前尝试过这个,但今天我再次用简单的(ess-sas-global-unix-keys) 替换了(setq ess-sas-global-unix-keys t)(根据 ESS 帮助邮件列表的建议),F3-F6 按钮现在可以在 ESS 中使用[ SAS] 模式。今天早上我确实得到了 emacs 的更新,所以这可能有助于修复。我仍然收到“文件模式规范错误...”。

编辑

根据@wvxvw 评论,在init.el(或.emacs)文件中包含(defvar ess-ac-sources nil) 可防止“文件模式...”错误的发生。

【讨论】:

    猜你喜欢
    • 2016-01-21
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多