2010-08-30 102 views
11

我找不到防止删除整个区域的设置,当您将其突出显示并且您退回到空格...(我只是希望它删除一个字符,即使区域被突出显示。)我已经有当区域高亮显示时只删除一个字符

(delete-selection-mode 0) 

和自定义设置变量(我有它的矩形功能启用CUA模式),

'(cua-delete-selection nil) 

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

+1

我认为这是标准的行为,即使区域被突出显示,emacs也会删除一个字符。所以我会查看我的'.emacs',以便找到禁用它的东西。 – phimuemue 2010-08-30 12:54:24

+0

嗯。我也认为是这样。退格键被绑定到'delete-backward-char',所以我不知道发生了什么。我无法在我的.emacs文件中找到任何指向它的东西,但它发生在所有模式中,因此它必须是很大的东西。 – hatmatrix 2010-08-30 13:01:23

+0

您是否尝试过通过'emacs -Q'启动emacs(它禁止加载'.emacs '所以你可以检查它是否确实是默认行为)? – phimuemue 2010-08-30 13:12:53

回答

5

发现:

(setq delete-active-region nil) 

就是答案。感谢所有与我一起强硬!

+0

为此,我不得不关闭cua模式,因为当标记处于活动状态时,'backspace'和'C-d'绑定到'cua-delete-region'。意外的是,因为'cua-enable-cua-keys'设置为'nil',但我想我会在没有cua模式的情况下执行... – hatmatrix 2010-08-30 15:33:12

+1

这并不能解决vanilla Emacs中的问题('emacs -q' )。 – 2010-08-30 15:49:03

+0

有趣!我甚至没有这个变量......一个快速的谷歌搜索似乎只存在于delsel.el中,它包含在GNU Emacs中,但显然在使用前必须要求。我从来不知道它;对不起,我不能有更多的帮助! – 2010-08-30 16:14:39

1

在ELisp中,0被认为是正确的。

试图通过将

(setq delete-selection-mode nil) 
+0

我不知道delete-select-模式也是一个变量...但你的建议没有奏效,不幸... – hatmatrix 2010-08-30 13:17:46

+0

多么奇怪 - 关于零 - 谢谢你的提示。 – hatmatrix 2010-08-30 13:18:42

+0

从您当前的缓冲区中,尝试“控制ESC ESC”并输入上面的Lisp(setq delete-selection-mode nil)(Enter)。它应该改变当地的行为。然后尝试在'.emacs'中设置行(可能适用于所有缓冲区)。最后,您可以使用'M-x'(Alt-x)'describe-variable'并输入(完成)'delete-selection-mode'。该菜单将为您提供第一个“自定义”,您可以在其中永久保存该值。 – 2010-08-30 13:54:38

2

Emacs有取决于高亮是否与鼠标或键盘完成不同的行为。

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

使用鼠标突出显示区域时,无论使用的是否为delete-selection-mode,使用退格键将删除用鼠标突出显示的区域。从手册第25.1.1:

“虽然该区域仍处于活动状态,打字或删除该 区域中的文本,并停用该商标,这种行为遵循其他 图形程序,建立了一个惯例,它确实而不是适用于以任何其他方式设置区域时, 包括移位选择(* note Shift Selection::)。

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

+0

嗨,实际上,我只使用键盘,点和标记(不移位)...移位选择模式为零。 – hatmatrix 2010-08-30 13:59:57

+0

那么,有些东西是歪斜的。我在OS X上使用GNU Emacs 23.2.1,当我以任何方式使用键盘来突出显示一个区域(''transient-mark-mode''或不)时,我在该区域突出显示时退格,我没有得到这种行为。如果我能找出一些可能导致您遇到问题的设置,我会再次发布。 – 2010-08-30 14:30:23

+0

谢谢。是的,很奇怪。我现在发现'delete-forward-char'也以同样的方式“破碎”! – hatmatrix 2010-08-30 14:43:15

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)) 
+0

这样可以防止CUA在正常模式下跺脚,但实际上* in * CUA模式下,我无法让它继续删除区域。 – 2014-03-31 15:01:53

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.

1

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

从Emacs中的文件:

删除选择模式是 `delsel.el互动编译Lisp函数”。

(删除选择模式&可选ARG)

切换删除选择模式。使用前缀ARG,如果ARG为正,则将Delete Selection 模式设为开,如果ARG不是正值,则将其关闭。

当启用删除选择模式时,瞬态标记模式也是 启用,如果选择 活动,则键入的文本会替换选择。否则,键入的文本仅插入点,不管 任何选择。