关于emacs模式的几个问题

关于emacs模式的几个问题,emacs,Emacs,我们知道,模式在emacs中非常重要。但我觉得我不太清楚如何设置它。例如,我经常在.emacs文件中看到类似(***-mode1)或(***-mode)的内容。一些教程还说,模式可以通过M-x***-模式设置。你能告诉我它们之间的区别和如何使用它们吗?谢谢 Lisp是一段代码,它为以后执行的另一段代码声明名称 (defun hello () (message "Hiya!")) 现在,您可以从Lisp中的任何其他地方调用命名代码 (hello) 只有在这一点上,消息表单才会执行 许多L

我们知道,模式在emacs中非常重要。但我觉得我不太清楚如何设置它。例如,我经常在.emacs文件中看到类似(***-mode1)或(***-mode)的内容。一些教程还说,模式可以通过M-x***-模式设置。你能告诉我它们之间的区别和如何使用它们吗?谢谢

Lisp是一段代码,它为以后执行的另一段代码声明名称

(defun hello ()
   (message "Hiya!"))
现在,您可以从Lisp中的任何其他地方调用命名代码

(hello)
只有在这一点上,
消息
表单才会执行

许多Lisp函数都包含一个表单,该表单指定了它们在以交互方式调用时的行为方式(例如,是否提示输入参数,或者是否使用光标或鼠标位置作为参数等)。可以使用
M-x
和函数名调用执行的函数

指定一个函数,该函数设置一些变量以专门控制Emacs的行为。例如,为适合文本文件的换行和光标移动设置(非常基本的)机制。当您处于文本模式时,不能处于C++模式或LISP模式或基本模式。这些是其他主要模式,它们定义了适合编辑其他类型文本的不同或附加功能

因为主模式是独占的,所以它通常是一个不接受任何参数的函数。因此,要将当前缓冲区置于文本模式,Lisp代码只需

(text-mode)
相反,指定独立于主模式的其他行为。例如,当在其他文本之前插入文本时,覆盖模式指定了一种不同的行为——通常,Emacs会向前推任何现有文本,但当覆盖模式处于活动状态时,光标前面的现有文本将在您键入时被替换

您可以随时激活多个次要模式——您可以在文本模式和覆盖模式下同时激活flyspell(键入时检查拼写)、工具栏模式、菜单栏模式和行号模式

因此,次要模式的一个常见(尽管不是通用)约定是执行切换。当您已经处于工具栏模式时,
M-x工具栏模式
将禁用此次要模式。要明确地禁用该模式,请向其传递一个负数参数

(toolbar-mode -1)
如果没有参数,代码将切换——结果将取决于模式是否已处于活动状态


(如评论中所述,这在Emacs 24中发生了变化;我正在描述历史行为。)

(***-mode 1)
(***-mode)
通常会执行相同的操作,即以编程方式打开它。当数字为负数或0时,模式将以编程方式关闭
M-x
用于用户手动打开/关闭的情况。您可能应该阅读Emacs教程。尝试按
Ctrl
+
H
,然后按
T
(或者像Emacs文档所说的那样,
C-HT
)。这是一个非常详细的答案。请注意,从Emacs 24开始,在没有参数的代码中调用次要模式总是启用该模式。如果该模式已启用,它将保持启用状态。