【问题标题】:Avoiding overlapped keybindings in emacs?避免emacs中重叠的键绑定?
【发布时间】:2013-05-07 12:03:19
【问题描述】:

我做了一些搜索,但找不到我要找的东西,所以我想我会问。然而,这可能是由于没有使用正确的术语。

我是 emacs 新手,已经使用 vim 八年左右,但我真的需要一个可以根据自己的意愿变形的编辑器,所以我正在切换。现在在 vim 中,您可以定义一个领导键,以避免与各种扩展重叠绑定。在 emacs 中,应该只为用户保留和弦,但各种模式不遵守这一点。在 emacs 中有没有一种方法可以确保我的自定义绑定不会像 vim 领导键一样重叠?我问的原因是我想保持我的绑定健全。

【问题讨论】:

  • 如果某个库违反了键绑定约定,则应将其作为错误报告给库作者。

标签: emacs


【解决方案1】:

手册详细说明了约定:

C-hig (elisp) Key Binding Conventions RET

为最终用户保留的序列是:

  • C-c 表示任何(未修改的)大写或小写字母:[A-Za-z]
  • 功能键F5F6F7F8F9(再次,没有修饰键)

我建议使用这些序列中最简单的一个作为 前缀 绑定,因为您可以使用任何键跟随它们,从而为您提供大量选项。

我喜欢的其他人的建议是,如果您不常用 suspend-frame,请取消绑定 C-z,因为这会打开另一个方便的前缀。

当然,如果您为操作系统和键盘设置 Super 和 Hyper 修饰键,您可能会获得比您找到用途更方便的序列。对于许多使用现代键盘上的附加修饰键的人来说,这是一个非常合理的选择。

最后,key-chord 库是一种非常流行的方法,它通过使用成对的(未修改的)键一起或快速连续(或一个键敲击两次)来创建新的方便且不冲突的绑定。根据我的经验,这非常有效,尽管您显然必须非常小心以避免可能自然发生的绑定序列。

【讨论】:

  • 非常感谢,所以我假设我可以安全地使用 C-c 和弦。会试一试,希望我不会发生冲突。
【解决方案2】:

我个人使用 C-' 作为我的个人键绑定映射的“前导键”。您可以像这样创建前缀并将键绑定到它:

(global-set-key (kbd "C-'") ctl-quote-map)
(define-key ctl-quote-map (kbd "C-p") 'stumpwm-move-window-up)
(define-key ctl-quote-map (kbd "C-n") 'stumpwm-move-window-down)
(define-key ctl-quote-map (kbd "C-f") 'stumpwm-move-window-right)
(define-key ctl-quote-map (kbd "C-b") 'stumpwm-move-window-left)
(define-key ctl-quote-map (kbd "r") 'stumpwm-interactive-resize-window)

没有人踩过不明显的东西,如果您使用左控制,它是一个平衡的双小指动作。 C-;也不错,就是我用来做stumpwm转义键的。

【讨论】:

  • 附带说明,如果我想将 C- 放在大写锁定上,我可以只为 emacs 执行此操作,还是需要在系统级别进行映射?
  • 如果您在使用 X windows 的 Linux 上,请查看“man xmodmap”,以了解在手册页末尾附近重新映射控制/大写锁定的低级方法。我认为您无法在 emacs 中重新映射控件。
  • 好的,谢谢我知道 xmodmap 只是想知道 emacs 是否可以自己做。再次感谢。
【解决方案3】:

Emacs keybinding conventions,其中一些真的让我感到惊讶。

相关部分是C-c [a-zA-Z]<F[5-9]> 是为最终用户保留的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    相关资源
    最近更新 更多