首页 > 解决方案 > Emacs:启用 CUA 模式时如何重新定义 Ctrl-Enter?

问题描述

如果启用了 cua-mode ,则重新定义Ctrl-Enter不会按预期工作,并且始终运行cua-set-rectangle-mark功能。在下面的代码中,您可以看到我还为我的函数定义了Alt-Enter,只是为了测试,它运行良好。但我希望将Alt-Enter留给cua-set-rectangle-mark因为我更喜欢使用Ctrl-Enter来调用我的函数,该函数在当前行下方创建一行。怎么了?

(cua-mode t)
(defun vscode-insert-line-below()
  (interactive)
  (move-end-of-line 1)
  (newline-and-indent))
(global-set-key (kbd "C-<return>") 'vscode-insert-line-below)
(global-set-key (kbd "M-<return>") 'vscode-insert-line-below)

标签: emacskey-bindingscua-mode

解决方案


这可能是你想要的:

(cua-mode t)
(defun vscode-insert-line-below()
  (interactive)
  (move-end-of-line 1)
  (newline-and-indent))
(define-key cua-global-keymap (kbd "<C-return>") 'vscode-insert-line-below)

(您可以使用(kbd "<C-return>")(kbd "C-<return>"),但我喜欢使用C-h k显示给我的表格。)

当您在cua-mode本地键盘映射中cua-global-keymap时,它的绑定会覆盖相同的全局绑定。

我通过做C-h k C-RETin找到了那张地图cua-mode。它告诉我:

<C-return>运行命令cua-set-rectangle-mark(在 中找到 cua-global-keymap),这是一个交互式自动加载的 Lisp 函数cua-rect.el

它是必然的<C-return>

[在加载函数定义之前,Arg 列表不可用。]

在鼠标单击位置开始矩形。


推荐阅读