你好!
(evil-define-key learnEn-mode-map "q" 'quit-window)
修改这个快捷键时失败报错
然后我换成了
(define-key evil-normal-state-map "q" 'quit-window)
结果所有的 org-mode都改变了按q就关闭
请问我该怎么办? 我只想让我定义的模式 有这个快捷键。 谢谢
evil-define-key
的定义是 (evil-define-key STATE KEYMAP KEY DEF &rest BINDINGS)
。也就是说你应该用 (evil-define-key 'normal learnEn-mode-map "q" 'quit-window)
来定义快捷键。
可以按 C-h f
然后输入函数名来查看函数文档的(´・ω・`)
你好 我还是出现了 org模式中的 q 键 也变成了 ‘quit-window的问题
"(ºДº*) 不应该啊
话说你修改之后重启了没?可能之前的设置还在的
额 我试试再
(define-derived-mode learnEn-mode org-mode “learn-En” “Major mode for learnEn. \{learnEn-mode-map}” (read-only-mode 1) ;;(define-key learnEn-mode-map “q” 'quit-window) ;;(define-key evil-normal-state-map “q” 'quit-window) (evil-define-key 'normal learnEn-mode-map “q” 'quit-window)) 这是 我的代码 但是还是 都可以用q关掉啊~~ T_T!
看来 define-derived-mode
用的是原来的 keymap 啊_(:зゝ∠)_
也就是说你的 learnEn-mode
和 org-mode
现在是共享同一个keymap的(虽然符号不同),修改了一个会影响另一个。其实我也没用过 define-derived-mode
_(:зゝ∠)_
那咋整啊?? 我想在里面org格式显示 还有自己的快捷键~~:joy:
试试 copy-keymap
?
define-derived-mode
应该可以自己指定 keymap 的值吧
EDIT: 这段代码应该是可用的:
(define-derived-mode learnEn-mode org-mode "learn-En"
"Major mode for learnEn.
\\{learnEn-mode-map}"
(read-only-mode 1))
(setq learnEn-mode-map (copy-keymap org-mode-map))
(evil-define-key 'normal learnEn-mode-map "q" 'quit-window)
把里面的代码移出来然后在外面覆盖keymap。还有文档的第二行开头应该用两个反斜杠的。
应该是被 evil-mode
覆盖了,M-x describe-key 查看是不是绑定到了 (evail-record-macro)
。
以下方式我测过是有效的:
(define-derived-mode learnEn-mode org-mode "learn-En"
"Major mode for learnEn.
\{learnEn-mode-map}"
(read-only-mode 1))
(evil-define-key 'normal learnEn-mode-map "q" 'quit-window)
\好像是被转义了~~ 源代码料卡里复制过去的
\\{
在字符串里面是 \{
,而 \{
在字符串里是 {
。只有写成 \\{learnEn-mode-map}
才能在文档里面显示 keymap 的内容的,你可以用 C-h f learnEn-mode RET
打开对应的文档看看。
顺便一问,快捷键问题解决了吗?
额 还没有 现在还是 要不就不生效 要不就是所有org-mode 都被绑定了 正在看文档~~~ 内心比较崩溃
使用define-key会提示被其他的模式给覆盖了。使用evil-define-key 这个q变成了怎么破?
什么情况_(:зゝ∠)_我在11楼的代码是测试过有效的啊。我再看看
在我的机器上确实是有效的,q键可以生效,也不会覆盖org-mode的按键。不过我在配置里面把 q 键设置成了别的功能,可能是两段代码的共同作用使它生效了。我另一段代码里是这么设置的:
(evil-global-set-key 'normal "q" #'evil-quick-sender)
(evil-global-set-key 'visual "q" #'evil-quick-sender)
(evil-global-set-key 'normal "Q" #'evil-record-macro)
默认 evil 的 evil-record-macro
是绑定在 evil-normal-state-map
里面的,我之前改用 evil-global-set-key
把按键覆盖了。虽然 evil-global-set-key
的源代码也是设置 evil-normal-state-map
的_(:зゝ∠)_
不知道在 11 楼代码的 evil-define-key
前面加一个 (evil-global-set-key 'normal "q" 'evil-record-macro)
行不行
啊 十一楼的代码 我报错是额~~~ 函数未定义~~~ 哥要不我给你我的github地址 你帮我交个MR过来吧:joy:
原来你是把代码写到 funcs.el
里了啊_(:зゝ∠)_
spacemacs 在加载funcs里的代码的时候 org 和 evil 都没有被加载,当然会未定义了。
这种情况的话就只能在文件里 require org 了,或者写一个启动这个 mode 的函数,在函数里面进行初始化(require org 和 定义快捷键),起到延迟加载 org 的功能。
EDIT: 我刚刚交了一个pr
哦 那 我改到 pakage.el 里面试试~~