Emacs/elisp:全局设置键绑定对 Meta-<down> 或 - 无效<up>?



我正在尝试将M-<up>M-<down>分别绑定到scroll-down-linescroll-up-line,如下所示:https://stackoverflow.com/a/16229080/562139。

这是我.emacs中的内容:

;; Key bindings
(global-set-key (kbd "M-g") 'goto-line)
;; Scroll line by line
(global-set-key (kbd "M-<down>") 'scroll-up-line)
(global-set-key (kbd "M-<up>") 'scroll-down-line)

问题:滚动键绑定未生效,而 goto-line 的绑定生效。

但是,当我运行M-x scroll-down-line时,emacs 会提示我并说

"您可以使用运行命令">

注意:当我直接在迷你缓冲区中运行global-set-key (kbd "M-<down>") 'scroll-up-line)(global-set-key (kbd "M-<up>") 'scroll-down-line)时,绑定生效!但是,当我做后者时,我似乎已经通过眼角注意到,按下M-<up>实际上会发送类似ESC ESC-<up>的东西。

我是狐狸。什么给?

注意:我正在终端中运行 emacs 24.3(通过 OSX 上的 iTerm,选项密钥映射到 ESC+(,通过 SSH 到 RHEL5 虚拟机。


更新

我遵循了这个答案中的建议,发现按 M- 会导致完全不同的结果:

ESC <up> (translated from ESC M-[ A) runs the command
scroll-down-line, which is an interactive compiled Lisp function.
It is bound to <M-up>, ESC <up>.
(scroll-down-line &optional ARG)

我将尝试将该键序列绑定到函数并检查结果。

  1. 尝试在没有 init 文件的情况下启动 Emacs:emacs -Q ,看看是否可以重现该问题。我没有看到问题,Emacs 24.3 处于终端模式。

  2. 你短暂看到的大概是ESC <up>,相当于M-<up>

  3. 您是否可能打算键入"当我运行M-x scroll-up-line(而不是down(时"?

  4. 我怀疑您处于某种模式,该模式为这些键提供了本地绑定或次要模式绑定,这会覆盖全局绑定。要对此进行测试,请尝试在基本模式下的缓冲区中进行测试。如果是这种情况,则要覆盖该覆盖,您还需要在该模式的键盘映射中绑定密钥。

  5. 如果您无法从emacs -Q开始重现问题,则递归地平分您的 init 文件 ( ~/.emacs (,直到找到罪魁祸首代码。

似乎钥匙在翻译中丢失了。

这种方式在openSuse上种植了forward-paragraph

(global-set-key [(meta down)] 'forward-paragraph)

最新更新