区域突出显示时,仅删除一个字符

时间:2010-08-30 12:42:38

标签: emacs elisp

我找不到阻止删除整个区域的设置,当你突出显示它并点击退格时...(我只想删除一个字符,即使区域突出显示。)我已经

(delete-selection-mode 0)

和自定义设置变量(我为其矩形函数启用了cua-mode),

'(cua-delete-selection nil)

但这就是我得到的行为。我错过了什么吗?

6 个答案:

答案 0 :(得分:5)

找到它:

(setq delete-active-region nil)

就是答案。感谢所有人对我的强硬态度!

答案 1 :(得分:2)

Emacs具有不同的行为,具体取决于突出显示是使用鼠标还是键盘完成的。

即使在transient-mark-mode中,如果设置标记并移动点,使用退格键也不会删除该区域。 delete-selection-mode是一种改变此行为的次要模式。

使用鼠标突出显示某个区域时,无论delete-selection-mode如何,使用退格键都会删除用鼠标突出显示的区域。从手册第25.1.1节:

“当该区域保持活动状态时,键入或删除该文本 区域并停用标记;此行为遵循其他人建立的约定 图形程序,当你以任何其他方式设置区域时,它适用, 包括换档选择(*注意换档选择::)。“

基于此,听起来您正在使用鼠标选择区域。那是对的吗?使用shift-select-mode或仅使用标记和点时是否会出现相同的行为?

答案 2 :(得分:1)

在ELisp中,0被认为是真实的。

尝试设置

(setq delete-selection-mode nil)

答案 3 :(得分:1)

正如已经指出的那样,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))

答案 4 :(得分:1)

显然,这使它适用于退格。即使在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)

This code was found here.

答案 5 :(得分:1)

(delete-selection-mode nil)添加到配置文件中。

来自Emacs内部的文档:

  

delete-selection-mode是一个交互式编译的Lisp函数   `delsel.el”。

     

(删除选择模式和可选的ARG)

     

切换删除选择模式。使用前缀ARG,转动删除选择   如果ARG为正,则关闭模式,如果ARG不为正,则关闭。

     

启用“删除选择”模式时,也会显示“瞬态标记”模式   如果选择,则启用和键入的文本将替换选择   活性。否则,键入的文本只是插入点而不管   任何选择。