Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/emacs/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
M-x集合变量在Emacs 24.5.1中不起作用_Emacs - Fatal编程技术网

M-x集合变量在Emacs 24.5.1中不起作用

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语法有什

我最近在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语法有什么变化吗

您的变量应该是用户选项变量名,即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版之间是否存在故障的问题。