gpt4 book ai didi

emacs - Emacs Lisp 中 setq 和 setq-default 的区别

转载 作者:行者123 更新时间:2023-12-02 00:35:56 24 4
gpt4 key购买 nike

我有一个关于 Emacs Lisp 的问题。 setqsetq-default 有什么区别?

教程说setq本地缓冲区中生效,而setq-default影响所有缓冲区。

例如,如果我在 init.el 中编写 (setq a-var a-vars-value),启动 Emacs 并打开一个新缓冲区后,我发现, a-var 也在那里,它的值是 a-vars-value。我认为它不应该在那里。看起来setqsetq-default之间没有区别。

我的理解有问题吗?

例如:

  1. 我在 init.el 文件中编写了 (setq hello 123),并在 shell 中运行 emacs abuffer,然后我输入“hello C-x C-e”,它显示“123”。当我在所有新缓冲区中运行它时,也会发生同样的情况。

  2. 我在init.el文件中写入了(setq tab-width 4)。当我运行 tab-width C-x C-e 时,它显示“8”(当前模式为“文本”)。但是,当我使用(setq-default tab-width 4)时,它显示“4”。我无法解释这种现象。

最佳答案

Emacs 中的某些变量是“缓冲区本地”的,这意味着每个缓冲区都可以为该变量拥有一个单独的值,该值会覆盖全局默认值。 tab-width 是缓冲区局部变量的一个很好的例子。

如果变量是缓冲区本地变量,则 setq 在当前缓冲区中设置其本地值,而 setq-default 设置全局默认值。

如果变量不是缓冲区本地变量,则 setqsetq-default 执行相同的操作。

在您的情况 2 中,(setq tab-width 4) 将当前缓冲区中 tab-width 的缓冲区本地值设置为 4,保留全局默认值tab-width 的值仍然为 8,因此当您在没有本地值的不同缓冲区中评估 tab-width 时,您会看到 8。然后,当您设置默认值为 4,该缓冲区拾取它,因为它仍然没有本地值。

关于emacs - Emacs Lisp 中 setq 和 setq-default 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18172728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com