遇到use-package 配置编程语言mode的几个小问题

练习use-package的时候,想配置语言环境来重构我的配置文件
不过 遇到了一些小问题,请大家帮我看看

0. :commands 指令?

这玩样干啥使的,我以为是加载一个mode之后接着执行这些命令,

(use-package color-moccur
  :commands (isearch-moccur isearch-all)
  :bind (("M-s O" . moccur)
         :map isearch-mode-map
         ("M-o" . isearch-moccur)
         ("M-O" . isearch-moccur-all))
  :init
  (setq isearch-lazy-highlight t)
  :config
  (use-package moccur-edit))

1. scheme 与 geiser

这个geiser不管怎么折腾配置,geiser-active-implementations始终是一个列表,没有被改变,
用不了run-geiser

(use-package scheme-mode
  :defer t
  :mode "\\.ss\\'"
  :hook
  ((scheme-mode . geiser-mode))
  :config
  :commands (geiser-mode run-geiser))

;; MODULE config about geiser
(use-package geiser
  :defer t
  :after (scheme-mode)
  :config 
  (setenv "MITSCHEME_LIBRARY_PATH"
	  "/usr/bin/chezscheme9.5")
  (add-to-list 'exec-path "/usr/bin/chezscheme9.5")
  (setq scheme-program-name "chezscheme9.5"
	geiser-chez-binary "chezscheme9.5"
	geiser-active-implementations '(chez)))

2. c+±mode

手动调出c++-mode的时候,给了我这么一堆乱码

run-hooks: Wrong number of arguments: #[(command &optional arg &rest ignored) "ÅÆ\"ƒ\0ÇÈ!‡ÅÉ\"ƒe\0	
…\0Ê ‡ÅË\"ƒ%\0Ì ‡ÅÍ\"ƒ.\0·ÅÏ\"ƒ9\0Ð!‡ÅÑ\"ƒD\0Ò!‡ÅÓ\"ƒO\0Ô!‡ÅÕ\"…\0Ê ‰:ƒa\[email protected]Ö!š?…\0×ØÙ#ƒ‚\0ÚÛ!ƒ}\0Üu‚\0Ûc‚\0ÚÝ!ƒ\0Üu‚\0Ýc)‡" [command major-mode company-irony-c-headers--modes arg matched eql interactive company-begin-backend company-irony-c-headers prefix ...] 5 ("/home/steiner/.emacs.d/elpa/company-irony-c-headers-20151018.909/company-irony-c-headers.elc" . 5840) (list (quote interactive))], 0

(use-package c++-mode
  :mode "\\.cc\\'"
  :hook
  ((c++-mode . flycheck-mode)
   (c++-mode . irony-mode)
   (c++-mode . company-mode)
   (c++-mode . company-irony-c-headers))
   :config
  (add-to-list (make-local-variable 'company-backends)
  	       '(company-lsp company-irony-c-headers company-irony)))

顺便说一句,写上(flycheck-mode 1)这样的代码还是有乱码

3. python-mode 的interpreter

调用run-python的时候,这样设置是有效的

(use-package python-mode
  :mode "\\.py\\'"
  :config
  (setq python-shell-interpreter "python3.8"))

但这样设置是无效的,什么玩样?

(use-package python-mode
  :mode "\\.py\\'"
  :interpreter "python3.8")

最后

我有个问题,有没有关键字指定use-package一个包后加载的函数或其他包,就像 调用c++-mode之后把flycheck,company之类的包导入进来

(use-package c++-mode
  :mode "\\.cc\\'"
  :hook
  ((c++-mode . flycheck-mode)
   (c++-mode . irony-mode)
   (c++-mode . company-mode)
   (c++-mode . company-irony-c-headers))
...

:commands 在我看来是用来是 defer 的一种场景,对于那些没有绑定到按键或是由 hook 拉起的命令,也就是手动调用的 interactive 命令,通过 :commands 指定延时加载直到它被显式的调用。

flycheckcompany 还是开 global-flycheck-modeglobal-company-mode ,然后指定一个 not 的 list 比较好。

我有个问题,有没有关键字指定use-package一个包后加载的函数或其他包,就像 调用c+±mode之后把flycheck,company之类的包导入进来

:after

建议认真看遍文档

你确定吗?文档里是这样写的

默认情况下, :after(foo bar):after(:all foo bar) 相同,这意味着直到 foo 和 bar 加载后才会加载该 package。

:after (foo bar)

安利 leaf,比 use-package 更容易理解

你反过来不就好了,别处有用 flycheck 吗

没有啊,我就想在c+±mode里用flycheck
现在我想先了解怎么配置flycheck再来弄这个