6

我喜欢使用C-jtoeval-last-sexp但 paredit-mode (我不喜欢)将其覆盖为paredit-newline. 查看 paredit-mode 文档,我看不到任何类似于paredit-mode-hook我可以add-hook调用的已定义local-set-key或类似函数的东西。

有人有建议吗?

更新 在尝试了下面的两个答案并且没有取得太大成功后,我认为问题可能与 paredit 在几个不同的上下文中加载的事实有关?也就是说,我打开了 Common Lisp、Clojure 和 Emacs Lisp 文件,所有这些文件都可以使用 paredit。可悲的是,在每种模式下,各种形式的eval-last-sexp名称略有不同,因此我无法为所有内容定义一次密钥。相反,我需要根据我所在的主要模式绑定密钥。希望这会增加另一个有用的数据点。

4

3 回答 3

12

无需使用钩子,如下所示应该可以工作:

(eval-after-load "paredit"
  #'(define-key paredit-mode-map (kbd "C-j") 'eval-last-sexp))

或者,如果由于某种原因不起作用,或者您只是更喜欢使用挂钩,您可以将上述调用添加到已激活define-key的主要模式的挂钩中。paredit

于 2012-06-27T21:16:13.273 回答
6

由其中一个宏定义的每种模式都会define-*-mode自动运行相应的MODE-hook.

我看到 paredit-mode 是用 定义的次要模式(define-minor-mode paredit-mode ...),因此它将运行paredit-mode-hook

您可以键入M-x find-function RET define-minor-mode RET并搜索run-hooks以查看定义此行为的位置。

编辑(基于对问题的补充):

它们是否都C-x C-e用作特定于模式的 eval-last-sexp 函数的默认绑定?这对他们来说似乎是一件一致的事情,如果是这样,那么您可以使用以下方法:

(local-set-key (kbd "C-j") (key-binding (kbd "C-x C-e")))
于 2012-06-28T02:05:30.640 回答
3

有一个paredit-mode-hook。直到你添加一些东西,你才能看到它。很奇怪,但这就是钩子的行为方式。

但是,在您的情况下,最好的方法可能是清除 Cj 的 paredit 绑定:

(eval-after-load 'paredit
   #'(define-key paredit-mode-map (kbd "C-j") nil))

然后在每个主要模式挂钩中通过 local-set-key 设置您自己的。

于 2012-07-25T20:58:48.760 回答