Emacs (定义错误(quote gv invalid place)“%S不是有效的位置表达式”

Emacs (定义错误(quote gv invalid place)“%S不是有效的位置表达式”,emacs,windows-7,elisp,windows-10,Emacs,Windows 7,Elisp,Windows 10,加载emacs时,在添加cl-lib.el后使用--debug init时会出现以下错误: Debugger entered--Lisp error: (void-function gv-define-simple-setter) (gv-define-simple-setter buffer-file-name set-visited-file-name t) eval-buffer(#<buffer *load*<2>> nil "d:/Tools/Emac

加载emacs时,在添加cl-lib.el后使用--debug init时会出现以下错误:

Debugger entered--Lisp error: (void-function gv-define-simple-setter)
  (gv-define-simple-setter buffer-file-name set-visited-file-name t)
  eval-buffer(#<buffer  *load*<2>> nil "d:/Tools/Emacs-24.3/cl-lib/cl-lib.el" nil t)  ; Reading at buffer position 23391
  load-with-code-conversion("d:/Tools/Emacs-24.3/cl-lib/cl-lib.el" "d:/Tools/Emacs-24.3/cl-lib/cl-lib.el" nil nil)
  load("d:/Tools/Emacs-24.3/cl-lib/cl-lib.el")
  mapc(load ("d:/Tools/Emacs-24.3/cl-lib/cl-lib.el"))
  eval-buffer(#<buffer  *load*> nil "c:/Users/Psalm3_3/.emacs" nil t)  ; Reading at buffer position 76
  load-with-code-conversion("c:/Users/Psalm3_3/.emacs" "c:/Users/Psalm3_3/.emacs" t t)
  load("~/.emacs" t t)
  #[0 "\205\262
这就是我得到的错误:

Debugger entered--Lisp error: (void-variable defun-declarations-alist)
  (assq (quote gv-expander) defun-declarations-alist)
  (or (assq (quote gv-expander) defun-declarations-alist) (let ((x (\` (gv-expander (\, (apply-partially ... ...)))))) (push x macro-declarations-alist) (push x defun-declarations-alist)))
  eval-buffer(#<buffer  *load*<2>> nil "d:/Tools/Emacs-24.3/site-lisp/gv.el" nil t)  ; Reading at buffer position 8332
  load-with-code-conversion("d:/Tools/Emacs-24.3/site-lisp/gv.el" "d:/Tools/Emacs-24.3/site-lisp/gv.el" nil t)
  require(gv)
  eval-buffer(#<buffer  *load*> nil "c:/Users/Psalm3_3/.emacs" nil t)  ; Reading at buffer position 96
  load-with-code-conversion("c:/Users/Psalm3_3/.emacs" "c:/Users/Psalm3_3/.emacs" t t)
  load("~/.emacs" t t)
  #[0 "\205\262
调试器已输入--Lisp错误:(void变量defun声明)
(assq(报价gv扩展器)定义声明)
(或(assq(引用gv扩展器)defun声明列表)(let((x(\`(gv扩展器(\,(部分应用……))(push x宏声明列表)(push x defun声明列表)))
评估缓冲区(#nil“d:/Tools/Emacs-24.3/site lisp/gv.el“nil t);缓冲器位置8332处的读数
使用代码转换加载(“d:/Tools/Emacs-24.3/site lisp/gv.el”d:/Tools/Emacs-24.3/site lisp/gv.el“nil t”)
要求(gv)
计算缓冲区(#nil“c:/Users/Psalm3_3/.emacs“nil t”);缓冲器位置96处的读数
使用代码转换加载(“c:/Users/Psalm3\u 3/.emacs”“c:/Users/Psalm3\u 3/.emacs”t)
荷载(“~/.emacs”t)
#[0 "\205\262

很抱歉,我对LISP很陌生。

错误源于Emacs无法加载正确的文件。您正在尝试在此处手动加载一组单个文件。但是,这不是加载底层软件包的方式

通常,软件包附带的安装说明通常要求您在init文件中添加一些行:修改加载路径,设置加载软件包的条件,以及添加如何加载软件包的命令。这些都很少涉及直接调用
load
函数,这是一个非常复杂的问题低水平

如果查看原始错误,堆栈跟踪会告诉您它是由
(require cl lib)引发的
require
是Emacs在必要时加载文件的机制之一。要使其工作,您不需要直接加载有问题的文件。您所要做的就是设置加载路径,以便Emacs可以找到引用的文件

例如,对于
cl lib.el
文件,您可以这样做:

(add-to-list 'load-path "D:/Tools/Emacs-24.3/cl-lib")
您将这一行添加到init文件中(当然是在Emacs尝试加载cl-lib之前)

require
的计数器部分是
provide
。如果查看
gv.el
的源代码并一直滚动到底部,您将发现最后一行:

(provide 'gv)
这意味着他的文件提供了“功能”
gv
,无论何时您编写
(需要“gv”)
您告诉Emacs您需要该功能。如果Emacs已经知道,一切都很好;如果不知道,Emacs将尝试加载该功能。因此,要加载
gv.el
文件的内容,您只需将以下内容添加到您的init文件中:

(add-to-list 'load-path "/path/to/directory/containing/gv.el")
(require 'gv)
有关
要求
提供
的更多信息,请参阅

但让我从上面重申一点:通常,软件包附带特定的安装说明,通常在源代码文件顶部的一个较长的注释部分中有点“隐藏”。因此,无论何时要手动将软件包添加到安装程序中,请确保检查这些说明


旁注:

(mapc'加载)
只有当
扩展为文件列表时才有意义。如果像您的情况一样,
只是一个文件,您不妨编写:

(加载)

但是,同样地,
load
是一个低级功能,作为最终用户,您几乎不需要它。

错误源于Emacs无法加载正确的文件。您尝试在此处手动加载一组单个文件。但是,这不是加载底层软件包的方式

通常,软件包附带的安装说明通常要求您在init文件中添加一些行:修改加载路径,设置加载软件包的条件,以及添加如何加载软件包的命令。这些都很少涉及直接调用
load
函数,这是一个非常复杂的问题低水平

如果查看原始错误,堆栈跟踪会告诉您它是由
(require cl lib)引发的
require
是Emacs在必要时加载文件的机制之一。要使其工作,您不需要直接加载有问题的文件。您所要做的就是设置加载路径,以便Emacs可以找到引用的文件

例如,对于
cl lib.el
文件,您可以这样做:

(add-to-list 'load-path "D:/Tools/Emacs-24.3/cl-lib")
您将这一行添加到init文件中(当然是在Emacs尝试加载cl-lib之前)

require
的计数器部分是
provide
。如果查看
gv.el
的源代码并一直滚动到底部,您将发现最后一行:

(provide 'gv)
这意味着他的文件提供了“功能”
gv
,无论何时您编写
(需要“gv”)
您告诉Emacs您需要该功能。如果Emacs已经知道,一切都很好;如果不知道,Emacs将尝试加载该功能。因此,要加载
gv.el
文件的内容,您只需将以下内容添加到您的init文件中:

(add-to-list 'load-path "/path/to/directory/containing/gv.el")
(require 'gv)
有关
要求
提供
的更多信息,请参阅

但让我从上面重申一点:通常,软件包附带特定的安装说明,通常在源代码文件顶部的一个较长的注释部分中有点“隐藏”。因此,无论何时要手动将软件包添加到安装程序中,请确保检查这些说明


旁注:

(mapc'加载)
只有当
扩展为文件列表时才有意义。如果像您的情况一样,
只是一个文件,您不妨编写:

(加载)

但是,同样地,
load
是一个低级功能,作为最终用户,您几乎不需要它。

用于cl-lib的代码看起来非常奇怪。
(package-initialize)