org mode 快捷键绑定失败求助

(use-package org
  :ensure nil
  :bind
  (:map org-mode-map
		(("M-RET" . func-test)
  )))

结果org-mode 模式下 M-RET 还是 默认的 org-meta-return。 这个怎么解?

:map 平级的 list 多嵌套了一层吧。

https://github.com/nykma/nema/blob/develop/nema/nema-lsp.el#L60

没有那层嵌套也是一样的效果

(use-package org
  :ensure nil
  :bind  (:map org-mode-map
          ((kbd "M-RET") . func-test))
)

:slight_smile:

我还以为直接用 define-key跟写在use-package里效果一样…

(define-key emacs-lisp-mode-map (kbd "M-RET")
  (lambda ()
    (interactive)
    (message "fdf")))

兄弟,你这方法也不行。直接报错

你用没用evil

describe-key看下 可能<M-return>也要改掉

之前遇到过一个类似的需求,供参考,不知道是否有效。

总体的思路是这样的,你需要的快捷键是在org mode下特有的,需要先将这个快捷键设为 nil .然后再定义你需求的功能。

不知道能不能帮到你。

已经找到一个方法 ,然后再去设置:

(with-eval-after-load 'org (define-key org-mode-map (kbd “”) nil) )

但是必须是org加载完后设置才有效。不清楚org里面的快捷键加载机制。只能等org加载完了才行。其他地方都不好使。

你快捷键写错了,应该是 <M-RET> ,要加尖括号。

试试这个:

(use-package org
  :ensure nil
  :bind (:map org-mode-map
	      ("<M-RET>" . func-test)))

我在很多模式中都使用了 “M-RET” 作为模式的特定快捷键入口。都没有问题。

我刚刚也试了加上<>对我不起作用

你试试 <M-return> 行不行。

RET和return是不一样的,对应不同的ASCII码,制表符分别是 \r\n 。默认情况下 emacs将 return 转化为 RET。很多的mode如果没有特别定制,继承了emacs的这一特点。特别的,org-mode使用 M-return, C-return 而不是 M-RET, C-RET。

详细看这篇文章:http://www.zhangley.com/article/emacs-ret/

另外,你也可以查看 org-mode-map 变量,里面使用的也是 M-return 。

非常感谢,等我晚上有空了研究下RET,C-m,return

可以使用kbd函数来绑定键,不需要用<>来绑定