在emacs中定义快捷键绑定

4
我想将emacs中的一个命令映射到一个按键绑定上。我希望命令Control-l与命令Alt-x goto-line有相同的效果(因为该命令首先需要按回车来调用,然后再输入行号)。
我修改了init文件如下: (define-key (M-x goto-line) '\C-l) 但这并没有起作用。错误是define-key给出了多于一个的参数。
有人知道如何在emacs中重置键位绑定吗?
谢谢!
3个回答

12

M-g ggoto-line 的默认快捷键。你可以尝试一下。

要重新定义 C-l,请使用:

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

2
@HemalPandya 默认的跳转到行命令是 M-g g 或者 M-g M-g,因为 M-g 是一个前缀命令。你可能已经在 .emacs 文件中重新绑定了它。 - kindahero
@kindahero 你是对的。我没有想到goto-line在XEmacs和Emacs中会有不同的绑定。我错了。 - Miserable Variable

6

定制大量按键绑定的最简单方法是安装John Wiegley的bind-key模块,该模块是use-package Lisp软件包的一部分。在您的init.el中的解决方案:

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

小模式键通常会覆盖全局键,如果您不想出现这种情况,请使用函数bind-key*。该软件包在MELPA上,如果您不知道是什么,请快速了解Emacs软件包管理(应该只需2分钟即可将MELPA设置为您的存储库)。
Emacs中按键绑定的主要问题是小模式键经常会覆盖您自定义的键。在原始的Emacs中,人们通过创建自己的按键绑定小模式来解决这个问题。如果您真的想了解Emacs按键的工作方式,请仔细阅读Emacs手册中的按键绑定Elisp手册中的按键映射

3
我已将“(global-set-key(kbd”C-x g“)'goto-line)”设置为快捷键。您可以使用它或“(global-set-key(kbd”C-l“)'goto-line)”。我个人不建议更改C-l键的默认行为。
如果必须使用M-x define-key,请使用“(define-key global-map(kbd”C-l“)'goto-line)”。define-key的第一个参数是KEYMAP。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接