M-x集合变量在Emacs 24.5.1中不起作用
我最近在OSX机器上从24.1升级了Emacs 24.5.1。我使用本机的Cocoa Emacs应用程序 升级后,我无法使用M-x集合变量在Emacs 24.5.1中不起作用,emacs,Emacs,我最近在OSX机器上从24.1升级了Emacs 24.5.1。我使用本机的Cocoa Emacs应用程序 升级后,我无法使用M-x set variable更改变量的值。变量在my.emacs中定义,语法如下: (defvar project-root-directory nil) 根据上述定义,在Emacs启动并且加载.Emacs文件时没有错误,当我点击M-x set variable时,Emacs抱怨项目根目录变量不存在 Emacs 24.5中不允许使用M-x设置变量的defvar语法有什
M-x set variable
更改变量的值。变量在my.emacs
中定义,语法如下:
(defvar project-root-directory nil)
根据上述定义,在Emacs启动并且加载.Emacs
文件时没有错误,当我点击M-x set variable
时,Emacs抱怨项目根目录
变量不存在
Emacs 24.5中不允许使用M-x设置变量的defvar语法有什么变化吗 您的变量应该是用户选项变量名,即Lisp变量
意味着由用户定制。因此,使用defcustom
而不是defvar
:
(自定义项目根目录为nil)
“项目的根目录。”)
您可能希望为变量提供一个比本例中更好的文档字符串
(在Emacs24之前已经是这种情况了。)您的变量应该是用户选项变量名,即Lisp变量
意味着由用户定制。因此,使用defcustom
而不是defvar
:
(自定义项目根目录为nil)
“项目的根目录。”)
您可能希望为变量提供一个比本例中更好的文档字符串
(在Emacs24之前就已经是这种情况了。)您的问题的答案是是,Emacs24.5确实发生了一些改变,破坏了此功能。更准确地说,破损是在Emacs 24.3而不是24.5中引入的 在Emacs 24.3之前(也就是说,几十年来!),只需将
*
作为文档字符串的第一个字符,就可以将一个变量转换成一个用户变量,这样它就可以与设置变量一起使用了。(*
不会显示为显示的文档字符串的一部分。)
换句话说,在Emacs 24.3之前,您所需要做的就是能够使用M-x set变量
:
(defvar foo 42 "*This is a user variable.")
Emacs放弃这个特性是个好主意吗?有人这样认为。(我不知道。)
目前的情况如何
正如@Thomas所说,set variable
适用于使用defcustom
定义的变量。但是,更准确地说,它是为custom-variable-p
返回非nil的变量定义的
因此,您仍然可以将M-x set variable
与使用defvar
定义的变量一起使用,前提是您为其提供非零标准值
属性(这使其满足自定义变量-p
):
您的问题的答案是是,Emacs 24.5的某些更改打破了此功能。更准确地说,破损是在Emacs 24.3而不是24.5中引入的
在Emacs 24.3之前(也就是说,几十年来!),只需将*
作为文档字符串的第一个字符,就可以将一个变量转换成一个用户变量,这样它就可以与设置变量一起使用了。(*
不会显示为显示的文档字符串的一部分。)
换句话说,在Emacs 24.3之前,您所需要做的就是能够使用M-x set变量
:
(defvar foo 42 "*This is a user variable.")
Emacs放弃这个特性是个好主意吗?有人这样认为。(我不知道。)
目前的情况如何
正如@Thomas所说,set variable
适用于使用defcustom
定义的变量。但是,更准确地说,它是为custom-variable-p
返回非nil的变量定义的
因此,您仍然可以将M-x set variable
与使用defvar
定义的变量一起使用,前提是您为其提供非零标准值
属性(这使其满足自定义变量-p
):
太好了,这对我很有效。谢谢(奇怪的是,用“defvar”定义的变量以前在我的配置中用于定义用户选项变量名,但无论如何,我以后将使用defcustom)谢谢,但您能接受@Drew的正确答案吗?我认为这比我的好得多。我已经考虑过了,但出于对你是第一个的尊重,我不想取消我给你的分数。因为这是你的愿望,而且Drew的回答更详细,我将接受他的回答作为正确答案。:-)第一是一回事,但给出更具信息性的答案又是另一回事;-)干杯太好了,这对我很有效。谢谢(奇怪的是,用“defvar”定义的变量以前在我的配置中用于定义用户选项变量名,但无论如何,我以后将使用defcustom)谢谢,但您能接受@Drew的正确答案吗?我认为这比我的好得多。我已经考虑过了,但出于对你是第一个的尊重,我不想取消我给你的分数。因为这是你的愿望,而且Drew的回答更详细,我将接受他的回答作为正确答案。:-)第一是一回事,但给出更具信息性的答案又是另一回事;-)干杯谢谢你提供的细节。它回答了我关于24.1版和24.5版之间是否存在故障的烦人问题。感谢您提供的详细信息。它回答了我关于24.1版和24.5版之间是否存在故障的问题。