请问use-package到底是干什么用的?

是,没安装的话就安装。

我和你正好相反——我用的第三方package明显多于built-in package。所以我会把那个变量设为t,然后在不需要的地方添加:ensure nil


然后我感觉use-package做的事情还是以package为最小单位组织你的配置

无论是写通用配置还是个人化的配置,这样都会方便和整洁不少。毕竟有那些宏在就不用让配置散落得到处都是了……

5 个赞

愿闻其详。有没有更好的纯使用 use-package 的配置文件?

t 比 nil 多就不 overkill。 哦对了,我那句话是反驳“用到了极致”这个第三方给你加的定语,没有任何说这个配置本身乐色的意思。

我不明白什么叫“更好”……我自己只是照着 use-package 的 README 组织而已

他又不是bbatsov

如果没改前面的选项,为什么还要用 nil?况且如果这个选项改成 t 「这么好」,为什么默认值就不是 t,还有用户自己设置。

还是不太理解,比如:

这个``:`bind``` 和我直接写

(define-key tuareg-mode-map (kbd "<f8>") 'caml-types-show-type)

有什么区别呢?

比方说,我直接写的话还可以hook到特定mode下面:

(add-hook 'tuareg-mode-hook
          (lambda ()
            (define-key tuareg-mode-map (kbd "<f8>") 'caml-types-show-type)
            ))

use-package这么写它作用范围是多少呢?是Emacs启动就绑定吗?

如果写在config里呢?他们仅仅是分类好看吗?

不好意思, “更好”不太准确。

我不觉得这是用到了极致

只是想了解更极致的用法。

能提供一下 use-package-always-ensure:ensure t 区别的文档么?

我查到这个:

The ‘:ensure’ keyword causes the package(s) to be installed automatically if not already present on your system (set ‘(setq use-package-always-ensure t)’ if you wish this behavior to be global for all packages):

我看到了:

if you wish this behavior to be global for all packages

(defcustom use-package-always-ensure nil
  "Treat every package as though it had specified using `:ensure SEXP'.
See also `use-package-defaults', which uses this value."
  :type 'sexp
  :group 'use-package-ensure)

纯新手,这个 :type 'sexp 是什么?

请问 nykma 在需求的情况下会用到?

我自己的理解是用:

(require 'use-package-ensure)
(setq use-package-always-ensure t)

之后的 package 都不用写 :ensure t了。 请问是这样的么?

有没有什么副作用呢?

;; Version: 2.4

都是绑定按键、添加 Hook,只是写法不一样,怎么会可能会有区别呢!

Use-package 没有魔法,究竟起什么作用完全看你的代码。你的后续问题缺少代码,不清楚怎么回答。

是,我没用过这个选项,但我也是怎么认为的。

可能 (use-package isearch) 也会试图安装 isearch,但压根就没这个包

1 个赞

是的,always-ensure不会自动跳过内置包,只会生硬的报错

自荐下 GitHub - seagle0128/.emacs.d: Centaur Emacs - A Fancy and Fast Emacs Configuration

设置之后默认对于所有包都会先检查下载。对于 built-in 或者本地第三方 package,加上 :ensure nil 或者 :load-path就行了。

2 个赞

之后的 package 都不用写 :ensure t 了。 请问是这样的么?

是的。既然不用写 :ensure 的包是极少数,那使用这个全局变量能让我更专注于其它东西的定义上。

这个 :type 'sexp 是什么?

defcustom 用来定义一个变量,这个变量你可以在 (customize-variable) 里覆盖它的默认值。定义这个变量需要指定它的类型,这里这个变量的值的类型期望为 sexp ,也就是Lisp表达式。

请问 nykma 在需求的情况下会用到?

我的配置文件在这儿 ,不嫌丑的话随便拿随便用(

我的意思是:use-package除了使分类清晰之外还有没有别的用途(因为分类也可以用注释的方式)。比如:他能加快启动速度?

因为写法上看起来没有区别,那么它优化的点在哪里?

比如: require-package是当没有安装的时候自动下载安装,use-package的 :ensure nil也是同样的意思(从这个角度它肯定不能做什么优化)

再比如:还有我现在对每一个package都要require一下,use-package不需要require?

Centaur 好帅啊。一开始以为你不用 use-package, 后来发现都藏在 lisp 里面。已经加入我的学习列表里面啦。

设置之后默认对于所有包都会先检查下载。对于 built-in 或者本地第三方 package,加上 :ensure nil 或者 :load-path 就行了。

我会试试这个建议的。

另外:

为什么要单用一个 site-lisp 文件夹来放 robot-mode

========================================================================

是的。既然不用写 :ensure 的包是极少数,那使用这个全局变量能让我更专注于其它东西的定义上。

像你学习了。我先试一试,或许给 ~ bbatsov ~ 提个 PR :slight_smile:

我的配置文件在这儿 ,不嫌丑的话随便拿随便用(

not-so-hurt-yet-still-make-kind-of-sense

帅。

cd ~
mv .emacs.d .emacs.d.old

这个不错了。我自己的话,会用 git 建立一个新分支,然后慢慢学习。

=========================================================================

可能 (use-package isearch) 也会试图安装 isearch ,但压根就没这个包

有意思,这个算是 拼写错误 么?

@emacs_ran

很久以前 Centaur 也是不用use-package的,可以查看 legacy branch。后来发现用它组织配置文件更简洁,lazy loading 也很合理,大大加快启动速度。

这个文件夹用来存放一些不在 melpa 和 elpa 上的第三方库或者自己写的一些库,方便管理。robot-mode是目前唯一留下的,其他的尽量采用 melpa 和 elpa 上的官方库。当然你也可以像懒猫一样用submodule等方式管理这些库。

对 Use-package 感兴趣的话,自己看看文档、亲自试试就清楚了,至少比别人解释效果好。

我使用 use-package 是因为它有两个功能:

  1. 自动安装 package 功能
  2. 让缺少某个包的时候,不报错而是忽略这个包的配置