移动时的键绑定在保持移位时不会延伸区域

时间:2017-04-23 18:02:02

标签: emacs key-bindings motionevent

我在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。我该怎么做才能获得理想的行为?

1 个答案:

答案 0 :(得分: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的{​​{1}}帮助时,会将其翻译为C-NC-n也是如此:它被翻译为s-N。但是,如果您执行s-n,则不会将其翻译为C-h k s-: