gpt4 book ai didi

emacs - 有 emacs 键绑定(bind)百科全书吗?

转载 作者:行者123 更新时间:2023-12-02 11:54:41 26 4
gpt4 key购买 nike

这是 Emacs 中的一个常见场景:我想将一个函数绑定(bind)到一个键,但我不确定它是否可能与现有的键绑定(bind)(易于检查)或“流行”模块中的键绑定(bind)冲突(很难检查,什么是“流行”?)

如果有一本百科全书就好了:如果我查找C-c C-t,我会发现它绑定(bind)到:

  • org-todo 处于 org-mode
  • sgml-tag 处于 sgml-mode
  • ...

有这样的事吗?我知道我可以使用 C-c AC-c-Z 等,但有时不必按下并释放 Ctrl 键也很好。

最佳答案

我从未遇到过此类事情的资源。包作者可以完全自由地添加和更改键绑定(bind),无论是在他们自己的键映射中还是在全局键映射中。维护索引会很困难。

Emacs 可以动态加载功能,因此事件的键盘命令也是动态的,并且取决于您已安装和需要的功能。例如,如果您不需要 paredit,您将无法检查其键盘映射。

M-x描述绑定(bind)将告诉您有关Emacs当前已加载的键绑定(bind)的信息。这是一个很长的 list !下面的 show-key-bindings 函数会将其缩减为使用修饰键的绑定(bind)。

(defun get-bindings ()
(with-temp-buffer
(describe-buffer-bindings (current-buffer))
(buffer-string)))

(defun format-binding (b)
(let ((ws (split-string b)))
(apply 'format "%s\t%s" (butlast ws) (last ws))))

(defun binding? (str)
(string-match-p (rx bol (any "C" "M" "H" "S")) str))

(defun join-string-lines (lines)
(mapconcat 'identity lines "\n"))

(defun show-key-bindings ()
"Show the active keybindings for the current buffer."
(interactive)
(let* ((bs (split-string (get-bindings) "\n" t))
(fmt (mapcar 'format-binding (remove-if-not 'binding? bs))))
(save-excursion
(let ((help-window-select t))
(with-help-window "*active bindings*"
(princ (join-string-lines fmt)))))))
<小时/>

回顾一下,您可以使用一些函数来设置绑定(bind):

  • 全局设置键

    当您希望某些命令始终可用时,请使用此选项。

  • 本地设置 key

    设置当前缓冲区的按键出价。我喜欢在我的钩子(Hook)中使用它来使键绑定(bind)可用于特定模式。

  • 定义键

    将命令添加到键盘映射。键映射必须已经绑定(bind),因此在您的配置中使用它往往太脆弱。

如果您担心意外覆盖 emacs 配置中的模式绑定(bind),最简单的方法就是确定您是否真的需要该命令是全局的。尽可能使用 local-set-key

您还可以查看 key-chord (M-x package-install key-chord) 等软件包,或者如果您发现按键用完了,可以使用自定义键盘映射定义您自己的小模式。

<小时/>

使用一些精湛的 shell 脚本或 elisp,应该可以解析 elisp 文件列表并提取它们定义的键绑定(bind)。我稍后可能会研究一下。

同时,以下 unix shell 命令将在目录树中查找对上述键绑定(bind)形式的所有引用。您可以在 .emacs.d 中运行它来检查 elpa 包中设置的键绑定(bind)。

tree -fxi -P '*.el' | xargs egrep -s 'local-set-key|define-key|global-set-key'

关于emacs - 有 emacs 键绑定(bind)百科全书吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15938272/

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