Emacs 按住shift键时,移动键绑定不会延伸区域

Emacs 按住shift键时,移动键绑定不会延伸区域,emacs,key-bindings,motionevent,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) 当我在

我在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-:未定义
。我能做些什么来获得想要的行为?

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

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

此外,您还可以使用内置命令标记,直到句子结束:

(全局设置键(kbd“s-:”)标记句末)

编辑:


一件有趣的事情是,当您查看键绑定的
C-h
帮助
C-N
,它会被转换为
C-N
。对于
s-N
,情况也是如此:它被翻译成
s-N
。但是,如果您执行
C-hks-:
,则不会将其转换为
s-

请参阅
C-h v此命令键移位翻译
:“当输入的键序列没有绑定,但通过将大写字母更改为小写字母或将已移位的功能键更改为未移位的字母找到绑定时,会发生移位翻译。”
(defun my-mark-end-of-line ()
  (interactive)
  (set-mark-command)
  (move-end-of-line))
(global-set-key (kbd "s-:") 'my-mark-end-of-line)