Emacs:启用 CUA 模式时如何重新定义 Ctrl-Enter?

Emacs: How to redefine Ctrl-Enter when CUA-mode is enabled?

如果 cua-mode 启用,重新定义 Ctrl-Enter 不会按预期工作并且始终运行 cua -set-rectangle-mark 函数。在下面的代码中,您可以看到我还为我的函数定义了 Alt-Enter,只是为了测试,它运行良好。但我想离开 Alt-Entercua-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)

这可能是您想要的:

(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,并且其绑定会覆盖相同的全局绑定。

我通过在 cua-mode 中执行 C-h k C-RET 找到了那个地图。它告诉我:

<C-return> runs the command cua-set-rectangle-mark (found in cua-global-keymap), which is an interactive autoloaded Lisp function in cua-rect.el.

It is bound to <C-return>.

[Arg list not available until function definition is loaded.]

Start rectangle at mouse click position.