我有这些Helm命令的键绑定。
(define-key helm-map (kbd "C-a") #'helm-select-action)
(define-key helm-map (kbd "C-n") #'helm-next-page)
(define-key helm-map (kbd "C-p") #'helm-previous-page)
(define-key helm-map (kbd "TAB") #'helm-next-line)
(define-key helm-map (kbd "<backtab>") #'helm-previous-line)
(define-key helm-map (kbd "C-TAB") #'helm-toggle-visible-mark-forward)
除了最后一行,其他都可以。helm-toggle-visible-mark-forward
. 当我在舵手完成窗口中点击C-TAB时,我得到了错误信息。<C-tab> is undefined
.
使用 \t
(define-key helm-map (kbd "C-\t") #'helm-toggle-visible-mark-forward)
-- 同样的结果。<C-tab> is undefined
使用 <C-tab>
(define-key helm-map (kbd "<C-tab>") #'helm-toggle-visible-mark-forward)
-- wrong type argument, commandp
移除 #
(define-key helm-map (kbd "C-TAB") 'helm-toggle-visible-mark-forward)
-- 同样的结果。<C-tab> is undefined
使用 M-TAB
(define-key helm-map (kbd "M-TAB") #'helm-toggle-visible-mark-forward)
-- wrong type argument, commandp
使用lambda
(define-key helm-map (kbd "M-TAB") (lambda () (interactive) (helm-toggle-visible-mark-forward)))
-- symbol's function definition is void: helm-toggle-visible-mark-forward
是否可以重新绑定 helm-toggle-visible-mark-forward
? 如果是,我做错了什么?
用这个来代替。
(define-key helm-map (kbd "<C-tab>") #'helm-toggle-visible-mark-forward)
将Emacs帮助返回的你按下的键序的形式传递给... kbd
. C-h k
随后是 Control
与 Tab
告诉你。
<C-tab>
运行命令...
参见Elisp手册,节点 功能键这上面写着:
backspace
,tab
,newline
,return
,delete
这些键对应于常见的ASCII控制字符,这些字符在大多数键盘上有特殊的键。
在ASCII码中。
C-i
和<TAB>
是同一个字符。 如果终端能够区分它们,Emacs就会将这种区别传达给Lisp程序,将前者表示为整数9,而后者表示为 后者tab
.大多数情况下,区分两者是没有用的。 所以通常
local-function-key-map
(*注翻译关键词::)设置为映射tab
成9。 因此,字符代码9的键绑定(字符的C-i
)也适用于tab
. 同样的,这组中的其他符号也是如此。 函数read-char
同样将这些事件转化为字符。
但你说你已经试过了
(define-key helm-map (kbd "<C-tab>") #'helm-toggle-visible-mark-forward)
Emacs告诉你这个 -- 当你试图将它绑定到 M-TAB
(这与 C-M-i
):
-- wrong type argument, commandp
这意味着 helm-toggle-visible-mark-forward
并没有定义为命令。你是否加载了定义该函数的文件? 而且该函数的定义中是否有一个 interactive
规格(所以它实际上是一个 指挥)?
而这个尝试也说明你没有加载定义该函数的文件。
(define-key helm-map (kbd "M-TAB") (lambda () (interactive) (helm-toggle-visible-mark-forward)))
-- symbol's function definition is void: helm-toggle-visible-mark-forward
(另一种可能是你加载了一个文件,里面有一个名称几乎相同的命令,而你拼错了命令名。)
helm-toggle-visible-mark-forward
而 helm-toggle-visible-mark-backward
增加了 v3.6.1中。 中的 最新版本 (截至2020-04-25)是v3.6.0。因此,如果你想使用这些功能,你需要从源头安装。 否则,它们将是 未定义.
作为一个变通的办法,你可以直接将它们添加到你的配置中,在你的键绑定之前,就像这样。
;; Adding these functions here until they become available in the main source in version 3.6.1
(defun helm-toggle-visible-mark-forward ()
(interactive)
(helm-toggle-visible-mark 1))
(defun helm-toggle-visible-mark-backward ()
(interactive)
(helm-toggle-visible-mark -1))
(define-key helm-map (kbd "<C-tab>") #'helm-toggle-visible-mark-forward)