gpt4 book ai didi

Emacs 23 和 Emacs 24 之间的 Emacs 键绑定(bind)更改

转载 作者:行者123 更新时间:2023-12-04 07:41:14 24 4
gpt4 key购买 nike

我最近升级到 Emacs24,我的一些自定义键绑定(bind)因此而损坏。

根据the fine manual,可以使 Emacs 停止将功能键与其 ASCII 控制代码混为一谈(例如,可以将 C-mRET 绑定(bind)到不同的东西,或者 C-iTAB 等等)。这一直是我对 Emacs 的一大不满,这些宝贵的“第一级”键盘快捷键被浪费在我已经在我的键盘上有专用键的东西上。在我的情况下,我想将它们绑定(bind)到不同的东西,以通过模仿 gedit 来“现代化”键绑定(bind)。在 Emacs23 中,它运行良好:

(global-set-key (kbd "C-i") 'goto-line)
(global-set-key (kbd "C-m") 'comment-or-uncomment-region)
(global-set-key (kbd "C-d") 'kill-whole-line)

;; Fix some stuff broken by the above
(global-set-key [delete] 'delete-char)
(global-set-key (kbd "TAB") 'indent-for-tab-command)
(global-set-key (kbd "RET") 'newline)

然后,我升级到 Emacs24,它坏了,有点。从 C-m 的意义上说,它仍然“有效”。当然做一件事, RET做另一个,但问题是返回键在终端模式或迷你缓冲区中不再正常运行。在这两种情况下,返回键都没有激活我刚刚输入的命令,而是简单地将光标向下移动到下一行,我无法激活我输入到 minibuffer 或终端的命令。

具有讽刺意味的是,Emacs24 对删除的行为进行了很多更改,并在此过程中解耦了 C-d来自 DEL所以现在绑定(bind) C-d实际上是安全的无需绑定(bind) DEL回到预期的行为,所以如果我可以为我的返回键实现类似的“它只是有效”的行为,那将是很棒的,而 C-m绑定(bind)到别的东西。

所以,我可以设想两种可能的解决方案来解决这个问题。一个可能看起来像这样:
(global-set-key (kbd "C-m") 'comment-or-uncomment-region)
(global-set-key (kbd "RET") 'do-what-i-expect-the-return-key-to-do-in-any-mode)

或者,这样的事情会更好:
(setq decouple-ascii-control-codes-from-function-keys t)

但我不知道有任何此类变量或函数可以在这种情况下帮助我。

我曾多次尝试使用模式 Hook 来恢复终端和迷你缓冲区模式下的正确绑定(bind),但我似乎无法得到任何工作。帮助!

谢谢。

最佳答案

这似乎有效:

(add-hook 'find-file-hook
(lambda ()
(local-set-key (kbd "C-m") 'comment-or-uncomment-region)
(local-set-key (kbd "<return>") 'newline-and-indent)))

这里的想法是,我们不是在全局范围内修改返回键(这会破坏终端和 minibuffer 缓冲区),而是仅在每个缓冲区的基础上设置这些键绑定(bind),除了我们无条件地对代表文件的所有缓冲区执行此操作磁盘。

这有点低效,每次打开文件时都必须运行,但它很好,因为我不必考虑所有可能的模式来“修复”,它根本不会破坏终端/迷你缓冲区/等模式第一名。

关于Emacs 23 和 Emacs 24 之间的 Emacs 键绑定(bind)更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12362012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com