我开始将
evil-define-key
调用转换为使用 :general
扩展名 use-package
,有时它们有效,有时则无效。重新评估 (use-package ...)
s-表达式不会改变行为,所以我假设我有配置问题。
此代码有效,因为在正常模式状态下键入
g l
,会调用 link-hint
:
(use-package link-hint
:bind
("s-o" . link-hint-open-link)
:general
(:states 'normal :keymaps 'global-map
"gl" 'link-hint-open-link
"gL" 'link-hint-copy-link))
但是,下面的代码看起来非常相似,但在正常模式下并没有添加
g p
绑定:
(use-package consult
;; Enable automatic preview at point in the *Completions* buffer. This is
;; relevant when you use the default completion UI.
:hook (completion-list-mode . consult-preview-at-point-mode)
:init
;; Use Consult to select xref locations with preview
(setq xref-show-xrefs-function #'consult-xref
xref-show-definitions-function #'consult-xref)
:general
(:states 'normal :keymaps 'global-mode-map
"gp" 'consult-yank-pop
"gs" 'consult-line))
我不认为问题出在
:general
扩展名上,但实际上是与 General.el 添加到 g
序列有关,因为以下内容也不起作用:
(general-define-key
:states 'normal :keymaps 'global-mode-map
"gp" '(consult-yank-pop :which-key "yank pop")
"gs" '(consult-line :which-key "visual search"))
也许问题根本不在于一般性,因为以下方法也不起作用:
(evil-define-key 'normal 'global-mode-map (kbd "gp") 'consult-yank-pop)
所以我想我真正的问题是为什么
gl
有效,但 gs
和 gp
不起作用。
虽然我不知道为什么我的初始代码有时会起作用,但将
:general
扩展名更改为 use-package
的全局地图的可靠方法是删除 global-mode-map
。换句话说:
(use-package consult
...
:general
(:states 'normal
"gp" 'consult-yank-pop
"gs" 'consult-line)
第一段代码之所以有效,是因为您正确输入了键盘映射的名称:“global-map”。在其他文件中,您输入了“global-mode-map”,但它不存在。