【问题标题】:Binding a key-sequence to a command in Emacs在 Emacs 中将键序列绑定到命令
【发布时间】:2017-09-14 16:52:25
【问题描述】:

我想将键序列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) -- 由您使用 -- 和 (quote indent-rigidly) -- 使用您链接到的页面上解释的一般格式 -- 是等效的.请注意,后者出乎意料地冗长——写(quote indent-rigidly)的常用方式,以及您可能在其他地方看到的,是'indent-rigidly

标签: emacs keyboard-shortcuts


【解决方案1】:

该命令需要被引用。以下是等效的(并且应该有效):

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

【讨论】:

  • 我仍然收到消息&lt;C-tab&gt; is undefined。从命令行运行时:“emacs --debug-init”,错误显示为:Debugger entered--Lisp error: (error "C- must prefix a single character, not tab")
【解决方案2】:

将您在错误消息中看到的键描述准确地传递给kbd"&lt;C-tab&gt;"

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

M-x global-set-key 让你直接敲击键序列,而不知道如何描述它。 C-h k 后跟键序列向您展示了 Emacs 是如何描述它的——在这种情况下,它向您展示了 &lt;C-tab&gt;

然而,事实证明(kbd "C-&lt;tab&gt;")(kbd "&lt;C-tab&gt;") 返回相同的东西:[C-tab]。所以你可能还有其他问题。

C-h k 告诉你什么,当你按下你认为你想要的键序列?当您使用emacs -Q(无初始化文件)启动 Emacs 时,您是否看到同样的情况?


[顺便说一句,如果你不想被 Emacs 使用尖括号(完全没有必要)来进行关键描述所困扰,你可以只使用库 naked.el 而没有它们: (naked "C-tab") = (kbd "&lt;C-tab&gt;") = (kbd "C-&lt;tab&gt;").]

【讨论】:

    【解决方案3】:

    正确的代码是:

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

    或:

    (global-set-key (kbd "C-&lt;tab&gt;") 'indent-rigidly)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 2010-12-05
      相关资源
      最近更新 更多