当你突出显示整个区域时,我找不到阻止整个区域删除的设置,你点击退格...(我只想删除一个字符,即使区域突出显示。)我已经有了
(delete-selection-mode 0)
在自定义变量中(我为其矩形函数启用了cua-mode),
'(cua-delete-selection nil)
但这就是我得到的行为。我错过了什么吗?
当你突出显示整个区域时,我找不到阻止整个区域删除的设置,你点击退格...(我只想删除一个字符,即使区域突出显示。)我已经有了
(delete-selection-mode 0)
在自定义变量中(我为其矩形函数启用了cua-mode),
'(cua-delete-selection nil)
但这就是我得到的行为。我错过了什么吗?
找到了:
(setq delete-active-region nil)
是答案。感谢所有人对我的强硬态度!
Emacs具有不同的行为,具体取决于突出显示是使用鼠标还是键盘完成的。
即使在 transient-mark-mode
,如果设置标记并移动点,则使用退格键不会删除该区域。 delete-selection-mode
是一种改变此行为的次要模式。
使用鼠标突出显示某个区域时,无论如何 delete-selection-mode
,使用退格键将删除用鼠标突出显示的区域。从手册的第25.1.1节:
“当该区域保持活动状态时,键入或删除该文本 区域并停用标记;此行为遵循其他人建立的约定 图形程序,它确实如此 不 以任何其他方式设置区域时应用, 包括换档选择(*注意换档选择::)。“
基于此,听起来您正在使用鼠标选择区域。那是对的吗?使用时是否会出现相同的行为 shift-select-mode
或者只是使用标记和点?
在ELisp中, 0
被认为是真的。
尝试设置
(setq delete-selection-mode nil)
如前所述, cua-mode
不能很好地处理这个问题。在没有这个问题的情况下保留该模式的最简单方法似乎是重新定义cua键映射(请参阅 cua--init-keymaps
)初始化模式后,取消绑定各种删除键 cua-delete-region
:
(add-hook 'cua-mode-hook 'my-cua-mode-hook)
(defun my-cua-mode-hook ()
(define-key cua--region-keymap [remap delete-backward-char] 'delete-backward-char)
(define-key cua--region-keymap [remap backward-delete-char] 'backward-delete-char)
(define-key cua--region-keymap [remap backward-delete-char-untabify] 'backward-delete-char-untabify)
(define-key cua--region-keymap [remap delete-char] 'delete-char))
显然,这使它适用于退格。即使在cua模式:
;; Let backspace and delete be defined as usual if
;; nothing is highlighted, otherwise the marked region is deleted
(defun kill-something() (interactive)
(if (and mark-active transient-mark-mode)
(kill-region (point) (mark))
(backward-delete-char-untabify 1)))
;;(global-set-key [delete] 'kill-something)
(global-set-key [backspace] 'kill-something)
加 (delete-selection-mode nil)
到您的配置文件。
从Emacs内部的文档:
delete-selection-mode是一个交互式编译的Lisp函数 `delsel.el”。
(删除选择模式和可选的ARG)
切换删除选择模式。使用前缀ARG,转动删除选择 如果ARG为正,则关闭模式,如果ARG不为正,则关闭。
启用“删除选择”模式时,也会启用“瞬态标记”模式 如果选择,则启用和键入的文本将替换选择 活性。否则,键入的文本只是插入点而不管 任何选择。