Emacs 手册仅提供了设置单个命令绑定的示例。如何为一系列命令设置绑定,特别是以下内容:
- [M-down] 绑定到 [C-u 1 C-v]
- [M-up] 绑定到 [C-u 1 M-v]
这实际上是单行滚动。
C-v
被绑定到哪个键: C-h k C-v
。答案: C-v runs the command scroll-up-command, which is an interactive
compiled Lisp function in `window.el'.
It is bound to C-v, <next>.
(scroll-up-command &optional ARG)
Scroll text of selected window upward ARG lines
C-u 1
是什么意思?它告诉 C-v
向上滚动 1 行。scroll-up-command
,并传递一个值为 1 的 ARG
参数: (scroll-up-command 1)
。
How do you define your own command that does that?
(defun my-scroll-up-1-line ()
"Scroll up one line."
(interactive)
(scroll-up-command 1))
See the Elisp manual, node Defining Commands
.
And bind it to M-n
?
(global-set-key (kbd "M-n") 'my-scroll-up-1-line)
See the Emacs manual, node Rebinding
.
创建带有名称的键盘宏
将宏绑定到键组合
您可以将此代码包含到您的init.el
文件中。
(fset 'scroll-up-step
(lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ([21 49 prior] 0 "%d")) arg)))
(fset 'scroll-down-step
(lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ([21 49 next] 0 "%d")) arg)))
(global-set-key (kbd "M-<up>") 'scroll-up-step)
(global-set-key (kbd "M-<down>") 'scroll-down-step)
(global-set-key (kbd "\e <up>") 'scroll-up-step)
(global-set-key (kbd "\e <down>") 'scroll-down-step)
<F3>
C-u 1 next
<F4>
C-x C-k n scroll-down-step
C-x C-f </path/to/init.el>
(通常为“~/.emacs.d/init.el”)M-x insert-kbd-macro RET scroll-up-step RET
M-x insert-kbd-macro RET scroll-down-step RET
(global-set-key (kbd "M-<up>") 'scroll-up-step)
(global-set-key (kbd "M-<down>") 'scroll-down-step)
(global-set-key (kbd "\e <up>") 'scroll-up-step)
(global-set-key (kbd "\e <down>") 'scroll-down-step)
你会注意到我在单个绑定中包含了两次按键定义。这是因为该绑定与 Meta 键相关。在 GUI 模式下,Meta 键被描述为 M,但终端仍将其视为 ESC(即使按下 alt/option 键)。因此,我定义了两次,以便在 Emacs 的 GUI 和终端模式下都能正常工作。
这可能不是定义一系列命令的按键绑定的最快方法。但它肯定有效。我想知道是否有更简单的解决方案(如果有的话)。
(global-set-key (kbd "M-<up>") (kbd "C-u 1 <prior>"))
可能会更简单,但不一定更好。 - phils