【问题标题】:Key binding for movement does not extend region when holding shift按住 shift 键时,移动键绑定不会扩展区域
【发布时间】:2017-04-23 18:02:01
【问题描述】:

我在 MacBook Pro (macOS Sierra) 上使用 GNU Emacs,在 init.el 中我将 Cmd-ijkl 键绑定到 emacs 移动命令:

(global-set-key (kbd "s-j") 'backward-char)
(global-set-key (kbd "s-l") 'forward-char)
(global-set-key (kbd "s-i") 'previous-line)
(global-set-key (kbd "s-k") 'next-line)

当我在按住 shift 键的同时使用这些绑定时,它们会根据需要扩展和收缩区域。我最近决定绑定 Cmd-h 和 Cmd-;分别移动到行首和行尾。

(global-set-key (kbd "s-h") 'move-beginning-of-line)
(global-set-key (kbd "s-;") 'move-end-of-line)

我还取消了 Cmd-: 的现有绑定,因此它不会与使用 Shift-Cmd- 冲突;选择到行尾。

(global-unset-key (kbd "s-:"))

不幸的是,这还不够。虽然 Shift-Cmd-h 确实选择到行首,但 Shift-Cmd-;给出错误s-: is undefined。我该怎么做才能获得所需的行为?

【问题讨论】:

    标签: emacs key-bindings motionevent


    【解决方案1】:

    说实话,我也不知道你的方法为什么不能正常工作。这是一个临时解决方法。希望有人提出更体面的解决方案。

    除了您已经添加的内容之外,您可能还需要为“s-:”提供额外的键绑定。

    (defun my-mark-end-of-line ()
      (interactive)
      (set-mark-command)
      (move-end-of-line))
    (global-set-key (kbd "s-:") 'my-mark-end-of-line)
    

    此外,您也可以使用内置命令标记到句子的结尾:

    (global-set-key (kbd "s-:") 'mark-end-of-sentence)

    编辑:

    一个有趣的事情是,当您查看C-h 键绑定帮助C-N 时,它被翻译为C-ns-N 也是如此:它被翻译成 s-n。而如果您使用C-h k s-:,它不会被转换为s-;

    【讨论】:

    • 参考C-h v this-command-keys-shift-translated:“当输入的键序列没有绑定时发生移位转换,但通过将大写字母更改为小写或移位找到了绑定功能键到一个未移位的键。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    相关资源
    最近更新 更多