在 emacs 中定义键绑定

Posted

技术标签:

【中文标题】在 emacs 中定义键绑定【英文标题】:Define key-bindings in emacs 【发布时间】:2011-10-20 14:21:39 【问题描述】:

我想将 emacs 中的命令映射到键绑定。我希望命令 Control-l 与命令 Alt-x goto-line 具有相同的效果,然后返回(因为该命令首先需要调用返回,然后是行号)。

我修改了init文件如下:

(define-key (M-x goto-line) '\C-l)

但这没有用。错误是 define-key 被赋予了超过 1 个参数。

有谁知道如何在 emacs 中重置键绑定?

谢谢!

【问题讨论】:

【参考方案1】:

M-g ggoto-line 的默认快捷方式。您可能想尝试一下。

要重新定义 C-l 使用:

(global-set-key (kbd "C-l") 'goto-line)

【讨论】:

@HemalPandya 对于 goto-line 的默认值是 M-g gM-g M-g 从 M-g 是一个前缀命令。你可能已经在 .emacs 中的某个地方反弹了它。 @kindahero 你是对的。没想到goto-line 在 XEmacs 和 Emacs 中会有不同的绑定。我错了。【参考方案2】:

自定义大量键绑定的最简单方法是安装 John Wiegley 的 bind-key 模块,它是use-package Lisp 包的一部分。解决方案在你的init.el

(require 'bind-key)
(bind-key "C-l" 'goto-line)

次要模式键通常会覆盖全局键,因此如果您不想要这种行为,请改用函数 bind-key*。该软件包在 MELPA 上,如果您不知道它是什么,请快速了解 Emacs package management(应该需要 2 分钟将 MELPA 设置为您的存储库)。

Emacs 中键绑定的主要问题是次要模式键通常会覆盖您的自定义键。在 vanilla Emacs 中,人们通过creating a minor mode for your own keybindings 解决问题。如果你真的想了解 Emacs 键的工作原理,请仔细阅读 Key Bindings @ Emacs Manual 和 Keymaps @ Elisp Manual。

【讨论】:

【参考方案3】:

我设置为(global-set-key (kbd "C-x g") 'goto-line)。您可以使用它或(global-set-key (kbd "C-l") 'goto-line)。我个人不会从其默认行为中触摸 C-l 键。

如果必须使用 M-x 定义键,请使用 (define-key global-map (kbd "C-l") 'goto-line). define-key 的第一个参数是一个 KEYMAP。

【讨论】:

以上是关于在 emacs 中定义键绑定的主要内容,如果未能解决你的问题,请参考以下文章

在 Emacs 中全局覆盖键绑定

在 emacs 中取消设置键绑定

使用邪恶键绑定时,emacs 中的 Ctrl+U

emacs smartscan 更改键绑定

如何为带参数的交互式功能/命令创建Emacs键绑定?

Emacs Chrome键绑定