请教一下evil的`ds`这种keybinding该怎么写呢

比如想实现这种功能:

(define-key evil-normal-state-map "ds" 'sp-kill-sexp)

但是报错了:

Debugger entered--Lisp error: (error "Key sequence d s starts with non-prefix key d")

该怎么写才对呢?

(define-key evil-normal-state-map (kbd "ds") 'sp-kill-sexp)

https://www.gnu.org/software/emacs/manual/html_node/elisp/Key-Sequences.html

试了一下不行哦

首先这个错误是因为devil-delete,本身有定义就不能当做prefix key来用。


按下d/y/c等等之后是在operator-state,我的配置里有

;; evilmi=evil-matchit
(define-key evil-operator-state-map (kbd "M") 'evilmi-jump-items)

和你的情况有点不同的是evilmi-jump-items只是跳转,而sp-kill-sexp本身会kill,不过我试了一下

(define-key evil-operator-state-map (kbd "M") 'paredit-kill)

也是能按预期的工作的,所以你这样搞就行了。注意这样会对d/y/c等等全部生效。


另外不建议用s,evil-surround用的s,我觉得它还是很常用的,不知道你这个kill-sexp的频率如何。

1 个赞

evil-operator-state-mapd/y/c可以区分开来吗?想了下ds确实有点不妥。

那就是正常找个没被占用的键,evil的g/z开头有少量没用到的键,SPC开头也不错(spacemacs的SPC o ...是预留的),major mode spesific的就,开头。当然evil下也可以用C-a

general可以绑d/c/y这种功能键。

链接跳转的章节讲的general-key-dispatch这个函数很好用。