有没有Emacs paredit挂钩,所以我可以重新定义Cj?

bit*_*ops 5 emacs elisp

我喜欢使用C-jeval-last-sexp但paredit模式(我喜欢否则)覆盖这对paredit-newline.查看paredit-mode文档,我没有看到任何类似于paredit-mode-hook我可以add-hook调用的地方local-set-key或类似的功能.

有人有建议吗?

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

Gre*_* E. 10

不需要使用钩子,类似下面的东西应该工作:

(eval-after-load "paredit"
  #'(define-key paredit-mode-map (kbd "C-j") 'eval-last-sexp))
Run Code Online (Sandbox Code Playgroud)

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


phi*_*ils 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")))
Run Code Online (Sandbox Code Playgroud)