You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Emacs:如何迁移midje-mode次要模式的全部按键绑定?

解决midje-mode按键绑定覆盖projectile-mode的问题

嘿,我完全懂这种被按键冲突折腾得头大的感觉——花两小时调试确实够闹心的!midje-mode把所有绑定都堆在C-c根前缀下,确实很容易和projectile这类常用工具撞车,把它迁移到C-c C-m这类专属前缀是个好主意,下面给你一套可行的方案:

核心思路

先清空midje-mode在C-c下的原有绑定,再把它的命令重新映射到C-c C-m前缀下,而且要确保在midje-mode加载完成后再修改,避免变量未定义的问题。

具体配置代码

把这段代码加到你的Emacs配置文件(比如~/.emacs.d/init.el)里:

;; 等midje-mode加载完成后再修改按键绑定
(with-eval-after-load 'midje-mode
  ;; 先取消midje在C-c根前缀下的所有冲突绑定(这里列的是常见绑定,你可以根据自己的情况补充)
  (dolist (key (list "C-c :" "C-c ;" "C-c a" "C-c e" "C-c f" "C-c l" "C-c r" "C-c t"))
    (unbind-key key midje-mode-map))
  
  ;; 创建新的前缀映射:C-c C-m
  (define-key midje-mode-map (kbd "C-c C-m") (make-sparse-keymap))
  
  ;; 把midje的命令重新绑定到新前缀下,示例如下(根据你常用的命令调整)
  (bind-key "t" #'midje-run-test midje-mode-map)       ; 原来的C-c t → 现在的C-c C-m t
  (bind-key "a" #'midje-run-all-tests midje-mode-map)  ; 原来的C-c a → 现在的C-c C-m a
  (bind-key "r" #'midje-run-loaded-tests midje-mode-map) ; 原来的C-c r → 现在的C-c C-m r
  (bind-key "e" #'midje-show-failure midje-mode-map)   ; 原来的C-c e → 现在的C-c C-m e
)

小技巧

如果你不确定midje-mode具体有哪些按键绑定,可以用C-h k(也就是describe-key命令):按下C-h k之后再按原来的midje按键(比如C-c t),就能看到这个按键对应的函数名称,这样你就能准确地把所有需要的命令都重新绑定到新前缀下。

验证方法

保存配置后重启Emacs,打开一个Clojure文件激活midje-mode,试试按C-c C-m t,应该能正常触发midje的测试运行命令,同时原来projectile-mode的C-c前缀绑定也不会被覆盖了。

内容的提问来源于stack exchange,提问作者jennykwan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:47:33