我无法复现你所经历的与 C-HOME 的完全相同行为。对于我来说,它被翻译为 M-[ 1 ;
,没有 5H
(但实际上是插入了...)。
但是,鉴于这一点,以下是我如何设置绑定的方法。
我会进入 *scratch*
缓冲区并键入
(read-key-sequence "please type C-home ")
C-j
这将提示您输入一个键序列,所以按下 C-HOME,Emacs 应该在 read-key-sequence
行之后插入以下内容:
"^[[1;"
5H
这向我显示了键序列的实际字符串,以及神秘的
5H
。
使用该字符串,我会在我的 .emacs 中这样设置绑定:
(global-set-key "^[[1;" 'beginning-of-buffer)
这将适当地定义按键绑定,但是(对我来说)它现在会在缓冲区顶部插入5H
。我相信5H
是屏幕的产物...
更新添加:
5H
很烦人,但据我所知,Emacs认为我们要输入它。 因此,我编写了两种替代方法,以产生相同的行为。
第一种使用keyboard-quit
在到达缓冲区开头后中断键序列。 这可以防止插入5H
。 但是它的缺点是执行了一个keyboard-quit
- 每次都会闪烁/响铃提醒你。 有点烦人。
(global-set-key "^[[1;" 'my-bob)
(defun my-bob ()
"转到缓冲区开头,然后退出"
(interactive)
(beginning-of-buffer)
(keyboard-quit))
为了避免keyboard-quit
,我编写了另一个版本,它运行了一个小代码片段,如果存在则删除5H
。 它需要更多步骤,但是完成了任务。
(global-set-key "^[[1;" 'my-bob)
(defun my-bob ()
"转到缓冲区开头,然后删除绑定插入的任何5H"
(interactive)
(beginning-of-buffer)
(run-with-idle-timer 0.1 nil 'delete-inserted-chars "5H"))
(defun delete-inserted-chars (chars)
(save-excursion
(backward-char (length chars))
(if (looking-at (regexp-quote chars))
(delete-char (length chars)))))
delete-inserted-chars
可以重用于屏幕中其他插入字符的绑定。
C-h k
后跟M-<
来检查键序列是否绑定到beginning-of-buffer
。你输入是正确的。 - RorschachM-x emacs-version
- lawlistCtrl+Home
现在可以工作了 - 不知道为什么以前不能用。我不知道如何成功地输入M-<
:Alt+Shift+,
。当我尝试时,它会变成M-,
。我只在终端中使用emacs。 - npit