设置变量或启用模式时如何在nil和0或t和1之间选择


19

我了解nil0和/或-1用于禁用某些功能t1和和/或+1用于启用某些功能。在分配变量或启用/禁用次要模式时,我应该选择哪个?

我已经看到所有这些变化都在某一点或另一点使用。这使我想知道它们之间是否确实存在差异。我已经看到有时使用0对我nil不起作用,而对我却不起作用。使用位置是否有差异?


1
我已重新编写问题,以更清楚地说明我想问的问题。如果我输入的内容有误,请随时还原。
nispio 2014年

@nispio您的编辑很好。非常感谢你。:)
greduan 2014年

Answers:


17

TL; DR

在设置任何变量之前,必须知道如何解释该变量。同样,在调用任何函数(包括用于切换次要模式的函数)之前,必须知道如何解释该函数的参数。

使用C-hfC-hv查看有问题的函数或变量的文档。它应该指定期望的值。

“非零” 字面意思是任何不是的意思nil。这包括0和负数。


次要模式

让我们举一个具体的例子。输入C-hfblink-cursor-mode 并点击RET以查看功能文档blink-cursor-mode

(闪烁光标模式和可选的ARG)

切换光标闪烁(闪烁光标模式)。使用前缀参数ARG,如果ARG为正,则启用“闪烁光标”模式,否则禁用它。如果从Lisp调用,则如果ARG被省略或为nil,则启用该模式。

我们可以通过以下任一方式启用“闪烁光标”模式:

(blink-cursor-mode)           ; Omitted argument
(blink-cursor-mode 1)         ; Positive argument
(blink-cursor-mode t)         ; True argument
(blink-cursor-mode nil)       ; nil argument (don't use this)

请注意t,即使doc字符串中没有特别提及,也会有一个参数将起作用。虽然通常是这种情况,但是最安全的选择是使用文档字符串告诉您的内容,在这种情况下,这是一个正值。

另外,请注意,将进行论证的nil工作。我强烈建议nil您不要这样做,因为这会使您的意图不清楚。如果我浏览了您的Lisp代码并看到一个nil参数,那么我认为您想禁用次要模式。

我们还可以blink-cursor-mode通过以下方式禁用:

(blink-cursor-mode 0)         ; Non-positive argument
(blink-cursor-mode -1)        ; Negative argument

公告再次证明nil没有的禁用这个小模式的途径之一。在几乎所有次要模式下,都是如此。


变数

现在让我们来看一个变量的例子。输入C-hvtruncate-lines并点击RET以查看该变量的文档truncate-lines

截断行是在“ C源代码”中定义的变量。

非零表示不显示连续行。而是给每一行文本仅一个屏幕行。

您可以通过以下任意一种方式打开截断功能:

(setq truncate-lines t)       ; Boolean true value (non-nil)
(setq truncate-lines 1)       ; Positive value (non-nil)
(setq truncate-lines 0)       ; Zero value (non-nil)
(setq truncate-lines -1)      ; Negative value (non-nil)

0-1将起作用,可能会让您感到惊讶。同样,我建议不要使用它们,因为这会使您的意图不清楚。

禁用截断的唯一方法是:

(setq truncate-lines nil)     ; nil value

换句话说,您可以将其设置为truncate-lines等于数字,字母,字符串,列表或任何其他想要的值,只要它不求值nil就会启用截断。(但是您应该坚持使用t1)。


这回答了我的问题。谢谢。:)
greduan 2014年

0

这些都是不同的东西。0、1和-1是不同的数字;nil是一个符号。

他们每个人都在各地使用,用于许多不同的事情。要了解每种情况在特定上下文中的用途,请查阅该上下文的文档。这包括打开或关闭不同模式,使用变量启用和禁用不同事物的上下文以及许多其他上下文。

总共:

  • 您的问题范围太广而无用。
  • 您需要查阅文档:(a)通常,以了解有关Emacs Lisp的知识,以及(b)在特定上下文中(例如,特定模式的文档)。

给定模式的文档通常会告诉您如何打开和关闭它。如果它告诉您将1或-1 nil或non nil用作某物,那就意味着它。有一些打开和关闭模式的通用规则(以交互方式以及从Lisp代码中)。但这听起来好像您真的需要先获得一些一般背景。

请查阅Emacs文档,以了解如何从Emacs本身寻求帮助和其他信息:如何检查变量的值,如何查看变量或函数的文档(包括打开/关闭模式的函数) , 等等。

您可以使用 C-h C-hCtrl-h Ctrl-h开始,以了解Emacs帮助系统。然后从那里建立。

C-h r让您进入Emacs手册。试试Emacs教程:C-h t。并检查Emacs Wiki 新手页面和LearningEmacs页面。

要开始学习Emacs Lisp ::C-h i,然后选择名为的手册Emacs Lisp Intro并开始阅读。并查看有关学习Emacs Lisp的Emacs Wiki页面。


1
感谢您的回答。:)我想我在问它们使用的是什么上下文。应该更清楚一些。谢谢。:)我知道符号之间的主要区别,例如nilfalse和ttrue 的逻辑等价方式如何,其余只是数字。但我不知道的什么环境里,他们在平时使用。
greduan

请参阅我写的有关模式的一般信息的内容(链接到手册)。尽管有这些常规信息,您仍应始终从检查文档中查找感兴趣的特定模式开始。它将告诉您如何使用它来打开或关闭它。如果不是,则适用手册中描述的一般行为,但从特定的模式doc开始。关键不是这些事物本身之间的差异。关键是在特定情况下如何使用它们。为此,首先要询问上下文。
2014年

1
好。非常感谢你。:)太酷了,Emacs拥有了自己的SE网站,是吗?
greduan 2014年

1
PS不用担心。我肯定其他人会在这里谈论一些一般规则。;-)我更喜欢(a)让您查阅有关此文档的文档,因为它的编写只是出于这种学习的考虑,并且(b)让您始终通过询问有关其自身的特定模式来开始。一般规则不会胜过模式细节,如果您忽略后者,那么您将错过一切。
2014年

当SE拥有自己的Emacs模式时,将会很酷。;-)
Drew
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.