如何写自动安装插件的配置?

才疏学浅,实在不知道怎么写这种配置。 就是像各种大神配置一样,如果缺少插件会自动安装。如果插件已存在则直接加载。

use-package

不知道怎么写就问啊,你的问题具体一点,哪里不懂

1 个赞

完全不懂……………… 因为我google的一大堆函数,都不知道怎么办……

然后就参考下他们是如何实现的?

不懂就直接抄,spacemacs、prelude、山人的配置、陈斌的配置、purcell的配置……

好吧……我还是抄去……

(use-package PACKAGENAME
  :defer ;; 是一个数字就是推迟几秒加载
  :init ;; 在use-package 之前先加载的配置,一般是一些hook
  :bind ;; keybind,有了这个的话就没必要 defer t 
  :config ;; 加载之后的配置主体。把比较耗时间的部分写在这里明显地可以减少启动时间
)
2 个赞
(require 'package)
(setq package-archives '(("gnu" . "http://elpa.emacs-china.org/gnu/")
         ("melpa" . "http://elpa.emacs-china.org/melpa/"))) 
(setq my-package-list ;启动时自动安装的插件
      '(
        find-file-in-project
        web-mode php-mode 
        ivy ivy-rich counsel hydra swiper avy
        counsel-etags dumb-jump 
        magit
        ))
(unless package-archive-contents
  (package-refresh-contents))
(dolist (package my-package-list)
  (unless (package-installed-p package)
    (package-install package)))

emacs启动时自动安装插件是这么写的吧,这样成功了不过emacs每次启动时都要连网查询,网络不好时要卡半天,使emacs启动速度降低好多,感觉不适合我这样经常性重启emacs的用户

  • TODO 但这个功能也非常有用,应该用上emacs的多线程功能,把上面代码放在另一个线程里面执行,这样不影响emacs启动速度,不阻塞当前页面输入…有空在研究。

    不知道有没有大佬实现过类似的功能?

利用use-package

(use-package package-name
    :ensure t)
1 个赞

use-package 加个:ensure t 不就可以了嘛。

确实这个就可以了,没有必要想多线程的事,我这场景是新系统全新安装emacs,把配置文件复制过去想让其自动安装插件,这时候是没有use-package的,看来需要把use-package移出elpa目录,作为配置文件的一部分

:diminish 是啥作用啊?

把刷新的代码放到对包检查的代码里好了,可以避免不缺包的情况下联网查询的操作。

(dolist (package my-package-list)
  (unless (package-installed-p package)
    (unless package-archive-contents
      (package-refresh-contents))
    (package-install package)))
1 个赞

移除一些 minor-mode 显示在 modeline 上的信息(一般就是名字),依赖 diminish

哦 多谢 多谢

哈哈哈,直接读他们的配置源码。只读你感兴趣的这部分就好。太多了,可能会怕。:slight_smile:

感谢,用了你的代码,完美解决这个问题