我的代码是这样子的 ,可是报错
use-package: groovy-mode wants arguments acceptable to the `bind-keys’ macro, or a list of such values
(defmacro run!(format)
`(lambda()
(interactive)
(compile (format ,format (buffer-file-name)))))
(use-package groovy-mode
:mode ("\\.gradle\\'" "\\.groovy\\'")
:bind ("C-c C-c" . (run! "groovy %s")))
try this
(use-package groovy-mode
:mode ("\\.gradle\\'" "\\.groovy\\'")
:bind `("C-c C-c" . ,(run! "groovy %s")))
用 :bind
你只能写成
(defmacro run! (format)
`(compile (format ,format (buffer-file-name))))
(use-package groovy-mode
:mode ("\\.gradle\\'" "\\.groovy\\'")
:bind ("C-c C-c" . (lambda ()
(interactive)
(run! "groovy %s"))))
更好的做法是给这个 function 一个名字
(defun groovy-compile ()
(run! "groovy %s"))
...
:bind ("C-c C-c" . groovy-compile)
...
如果你用 which-key
,这样的话可以避免出现下面这样的 closure
,能有更明确的提示作用。
如果你的需求就是「少写点配置代码」,那就要给 use-package
自己写 binder。
如果实在不想定义 function,那这样也行。
(use-package groovy-mode
:mode ("\\.gradle\\'" "\\.groovy\\'")
:init
(bind-key "C-c C-c" (run! "groovy %s")))
这报一样的错。
4 个赞
少了 eval 和 backquote:
(eval
`(use-package groovy-mode
:mode ("\\.gradle\\'" "\\.groovy\\'")
:bind ("C-c C-c" . ,(run! "groovy %s"))))
1 个赞