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 个赞