在Emacs中将一个按键序列绑定到一个命令

3
我希望将键序列C-tab绑定到indent-rigidly。在我使用M-x local-set-key交互式执行后,它可以正常工作。但是我希望每次启动Emacs时都能应用它。为此,我在我的init.el文件中添加了以下行:
(global-set-key (kbd "C-tab") (indent-rigidly))

(如https://www.gnu.org/software/emacs/manual/html_node/efaq/Binding-keys-to-commands.html所述)
然而,它并没有起作用。上面一行中的“local-set-key”也无法工作。“C-TAB”也无法工作。错误信息为:
<C-tab> is undefined

问题出在哪里,如何解决?

(indent-rigidly) -- as used by you -- and (quote indent-rigidly) -- using the general format explained on the page you've linked to -- are not equivalent. The latter is unexpectedly verbose, mind -- the usual way of writing (quote indent-rigidly), and what you are likely to see elsewhere, is 'indent-rigidly - phils
3个回答

3
该命令需要使用引号。以下写法等效(并应该可以工作):
(global-set-key (kbd "C-<tab>") 'indent-rigidly)
(global-set-key (kbd "C-<tab>") (quote indent-rigidly))

我仍然收到消息<C-tab>未定义。从命令行运行:emacs --debug-init,错误显示为:Debugger entered--Lisp error: (error "C- must prefix a single character, not tab") - rnso

1
将错误信息中的键描述精确地传递给kbd"<C-tab>"
(global-set-key (kbd "<C-tab>") 'indent-rigidly)

M-x global-set-key 允许您直接按键序列,而无需知道如何描述它。然后,C-h k 跟着按键序列,会显示 Emacs 如何描述它 - 在这种情况下,它会显示 <C-tab>

但是,事实证明,(kbd "C-<tab>")(kbd "<C-tab>") 返回相同的结果:[C-tab]。所以你可能有其他问题。

当你按下你认为想要的键序列时,C-h k 告诉你什么?当你使用 emacs -Q(没有 init 文件)启动 Emacs 时,是否看到相同的内容?


[顺便说一句,如果您不想处理Emacs对键描述使用的(完全不必要的)尖括号并且被其困扰,您可以使用库naked.el并且不需要它们:(naked "C-tab") = (kbd "<C-tab>") = (kbd "C-<tab>")。]


0

正确的代码是:

(global-set-key [(control tab)] 'indent-rigidly)

或者:

(global-set-key (kbd "C-<tab>") 'indent-rigidly)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接