package参数的设定思路?

emacs载入package的步骤是怎样的?

产生这样的思考是因为在配置一些包的时候,如果使用的是(require package-name)的形式,那么一些变量的设定需要先于包的加载;(use-package package-name)也类似,需要把相关的设定放在init部分而不是config部分,我有点不理解:一方面,一些变量是在包当中定义的,那我先setq的变量不会被覆盖吗?另一方面,就像https://emacs-china.org/t/evil-insert-state-or-evil-emacs-state/16710/4这个帖子指出的一样,如果变量在包当中定义,那我在包加载之后设定变量的值,应该生效才对啊,为什么反而在包加载后再setq反而不生效了呢?

有些包会通过 defvar 来进行设置变量。其特点是当其变量已经设置,那么其不会生效,所以有些由 defvar 创建的变量你需要修改的话,就需要放在:init关键字下,也就是包加载之前。而那些可以在包加载后再进行修改的变量,可以使用:custom或:config下进行修改。或者放置于包加载之后的任何位置。

关于这个Emacs插件设置思路我推荐论坛用户狗哥的视频 @DogLooksGood

谢谢 我好奇的是为什么在包加载之后再进行修改,会无效?

加载的时候就需要用到呗,比如,你加载完再 setq 就晚了:

(defvar foo 12)
(message "%s" foo)

一般这种变量的文档都会说明。

你提到的这个就是,它的 :set 会用到这个变量,setq 不会触发,用 M-x customize 或 custom-set-variables 才行,当然大家好像都不喜欢用 custom 功能,一般都在 require 前用 setq

1 个赞