如何在 Emacs 中为一系列命令设置单个键绑定
How to set a single key binding for a sequence of commands in Emacs
Emacs 手册只有一个为单个命令设置绑定的示例。如何为一系列命令执行此操作。具体如下。
- [M-向下]到[C-u 1 C-v]
- [M-up] 到 [C-u 1 M-v]
这实际上是单行滚动。
您可以使用 keyboard macros 完成该任务。 link 几乎解释了如何去做,为了完整起见,这里是要做的事情:
- 找出
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
,传递给它一个 ARG
of 1: (scroll-up-command 1)
.
你如何定义你自己的命令?
(defun my-scroll-up-1-line ()
"Scroll up one line."
(interactive)
(scroll-up-command 1))
参见Elisp手册,节点Defining Commands
。
并绑定到M-n
?
(global-set-key (kbd "M-n") 'my-scroll-up-1-line)
参见 Emacs 手册,节点 Rebinding
。
为一系列命令定义键绑定的解决方案是
下面提供。摘要如下:
创建键盘宏并指定名称
- 向上滚动步骤:C-u 1 先验
- 向上滚动步长:C-u 1 下一个
将宏绑定到组合键
- M- <- 向上滚动步长
- M- <- 向下滚动步长
您可以将此代码包含到您的 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>
开始 KBD 宏定义
C-u 1 prior
您希望绑定的命令序列
<F4>
结束 KBD 宏定义
给最近的宏一个自定义名称(不要冲突!)
C-x C-k n scroll-up-step
对其他自定义命令执行相同的操作
<F3>
C-u 1 next
<F4>
C-x C-k n scroll-down-step
注:
先验 = PgUp / fn+up (Macbook)
next = PgDown / fn+down (Macbook)
在 Emacs
中打开 init.el
C-x C-f </path/to/init.el>
(通常是“~/.emacs.d/init.el”)
将宏 lisp 定义附加到 init.el 文件
M-x insert-kbd-macro RET scroll-up-step RET
M-x insert-kbd-macro RET scroll-down-step RET
将自定义命令的键绑定附加到 init.el 文件
(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)
您会注意到我已经包含了键绑定定义
一次绑定两次。这是因为绑定与
元键。元键在 GUI 模式中被描述为 M,但是
终端仍然认为它是 ESC(即使 alt/option 键是
按下)。因此我定义了两次,这样它就可以在两个 GUI 中工作
和 Emacs 的终端模式。
这可能不是定义键绑定的最快方法
命令序列。但它确实有效。我想知道是否有人有
更简单的解决方案(如果有的话)。
Emacs 手册只有一个为单个命令设置绑定的示例。如何为一系列命令执行此操作。具体如下。
- [M-向下]到[C-u 1 C-v]
- [M-up] 到 [C-u 1 M-v]
这实际上是单行滚动。
您可以使用 keyboard macros 完成该任务。 link 几乎解释了如何去做,为了完整起见,这里是要做的事情:
- 找出
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
,传递给它一个 ARG
of 1: (scroll-up-command 1)
.
你如何定义你自己的命令?
(defun my-scroll-up-1-line () "Scroll up one line." (interactive) (scroll-up-command 1))
参见Elisp手册,节点
Defining Commands
。并绑定到
M-n
?(global-set-key (kbd "M-n") 'my-scroll-up-1-line)
参见 Emacs 手册,节点
Rebinding
。
为一系列命令定义键绑定的解决方案是 下面提供。摘要如下:
创建键盘宏并指定名称
- 向上滚动步骤:C-u 1 先验
- 向上滚动步长:C-u 1 下一个
将宏绑定到组合键
- M- <- 向上滚动步长
- M- <- 向下滚动步长
您可以将此代码包含到您的 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>
开始 KBD 宏定义
C-u 1 prior
您希望绑定的命令序列
<F4>
结束 KBD 宏定义
给最近的宏一个自定义名称(不要冲突!)
C-x C-k n scroll-up-step
对其他自定义命令执行相同的操作
<F3>
C-u 1 next
<F4>
C-x C-k n scroll-down-step
注:
先验 = PgUp / fn+up (Macbook)
next = PgDown / fn+down (Macbook)
在 Emacs
中打开 init.elC-x C-f </path/to/init.el>
(通常是“~/.emacs.d/init.el”)
将宏 lisp 定义附加到 init.el 文件
M-x insert-kbd-macro RET scroll-up-step RET
M-x insert-kbd-macro RET scroll-down-step RET
将自定义命令的键绑定附加到 init.el 文件
(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)
您会注意到我已经包含了键绑定定义 一次绑定两次。这是因为绑定与 元键。元键在 GUI 模式中被描述为 M,但是 终端仍然认为它是 ESC(即使 alt/option 键是 按下)。因此我定义了两次,这样它就可以在两个 GUI 中工作 和 Emacs 的终端模式。
这可能不是定义键绑定的最快方法 命令序列。但它确实有效。我想知道是否有人有 更简单的解决方案(如果有的话)。