Emacs general.el包设置键绑定报错:<leader>t为非前缀键
General.el键绑定错误原因及解决方法
你的代码:
(general-nmap haskell-mode-map "<leader>t" 'foo-bar) (general-nmap "<leader>td" 'my-rg-todo)
执行时触发错误:
error: Key sequence <leader> t d starts with non-prefix key <leader> t
原因
你将<leader>t直接绑定到了命令foo-bar,这会让<leader>t成为一个直接执行命令的终结键序列,而非用于扩展子键的前缀键。当你尝试绑定<leader>td时,Emacs会检查其前缀<leader>t,发现它已经被占用为非前缀命令,因此抛出冲突错误。
解决方法
方法一:将<leader>t设为前缀键
通过general.el的语法把<leader>t定义为前缀,同时可以保留按<leader>t直接执行foo-bar的功能:
(general-nmap haskell-mode-map :prefix "<leader>t" "" 'foo-bar ; 空字符串对应按下前缀键本身时执行的命令 "d" 'my-rg-todo)
或者分步定义:
; 先将<leader>t设为前缀 (general-nmap haskell-mode-map "<leader>t" '(:ignore t :prefix t)) ; 再绑定子键和前缀本身的命令 (general-nmap haskell-mode-map "<leader>td" 'my-rg-todo) (general-nmap haskell-mode-map "<leader>t" 'foo-bar)
方法二:修改冲突的键序列
如果不需要<leader>t作为前缀,直接更换其中一个键绑定的序列即可,比如把<leader>td改成<leader>dt或者其他未被占用的组合:
(general-nmap haskell-mode-map "<leader>t" 'foo-bar) (general-nmap "<leader>dt" 'my-rg-todo)
内容的提问来源于stack exchange,提问作者Refael Sheinker
相关产品推荐
相关产品推荐

