是,没安装的话就安装。
我和你正好相反——我用的第三方package明显多于built-in package。所以我会把那个变量设为t
,然后在不需要的地方添加:ensure nil
然后我感觉use-package做的事情还是以package为最小单位组织你的配置。
无论是写通用配置还是个人化的配置,这样都会方便和整洁不少。毕竟有那些宏在就不用让配置散落得到处都是了……
愿闻其详。有没有更好的纯使用 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
,但压根就没这个包
是的,always-ensure不会自动跳过内置包,只会生硬的报错
设置之后默认对于所有包都会先检查下载。对于 built-in 或者本地第三方 package,加上 :ensure nil
或者 :load-path
就行了。
之后的 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
我的配置文件在这儿 ,不嫌丑的话随便拿随便用(
not-so-hurt-yet-still-make-kind-of-sense
帅。
cd ~
mv .emacs.d .emacs.d.old
这个不错了。我自己的话,会用 git 建立一个新分支,然后慢慢学习。
=========================================================================
可能
(use-package isearch)
也会试图安装isearch
,但压根就没这个包
有意思,这个算是 拼写错误 么?
很久以前 Centaur 也是不用use-package
的,可以查看 legacy branch。后来发现用它组织配置文件更简洁,lazy loading 也很合理,大大加快启动速度。
这个文件夹用来存放一些不在 melpa 和 elpa 上的第三方库或者自己写的一些库,方便管理。robot-mode
是目前唯一留下的,其他的尽量采用 melpa 和 elpa 上的官方库。当然你也可以像懒猫一样用submodule等方式管理这些库。
对 Use-package 感兴趣的话,自己看看文档、亲自试试就清楚了,至少比别人解释效果好。
我使用 use-package 是因为它有两个功能:
- 自动安装 package 功能
- 让缺少某个包的时候,不报错而是忽略这个包的配置