我找不到防止删除整个区域的设置,当您将其突出显示并且您退回到空格...(我只是希望它删除一个字符,即使区域被突出显示。)我已经有当区域高亮显示时只删除一个字符
(delete-selection-mode 0)
和自定义设置变量(我有它的矩形功能启用CUA模式),
'(cua-delete-selection nil)
但那是我的行为得到。我错过了什么吗?
我找不到防止删除整个区域的设置,当您将其突出显示并且您退回到空格...(我只是希望它删除一个字符,即使区域被突出显示。)我已经有当区域高亮显示时只删除一个字符
(delete-selection-mode 0)
和自定义设置变量(我有它的矩形功能启用CUA模式),
'(cua-delete-selection nil)
但那是我的行为得到。我错过了什么吗?
发现:
(setq delete-active-region nil)
就是答案。感谢所有与我一起强硬!
为此,我不得不关闭cua模式,因为当标记处于活动状态时,'backspace'和'C-d'绑定到'cua-delete-region'。意外的是,因为'cua-enable-cua-keys'设置为'nil',但我想我会在没有cua模式的情况下执行... – hatmatrix 2010-08-30 15:33:12
这并不能解决vanilla Emacs中的问题('emacs -q' )。 – 2010-08-30 15:49:03
有趣!我甚至没有这个变量......一个快速的谷歌搜索似乎只存在于delsel.el中,它包含在GNU Emacs中,但显然在使用前必须要求。我从来不知道它;对不起,我不能有更多的帮助! – 2010-08-30 16:14:39
在ELisp中,0
被认为是正确的。
试图通过将
(setq delete-selection-mode nil)
我不知道delete-select-模式也是一个变量...但你的建议没有奏效,不幸... – hatmatrix 2010-08-30 13:17:46
多么奇怪 - 关于零 - 谢谢你的提示。 – hatmatrix 2010-08-30 13:18:42
从您当前的缓冲区中,尝试“控制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
Emacs有取决于高亮是否与鼠标或键盘完成不同的行为。
即使在transient-mark-mode
中,如果您设置标记并移动该点,使用退格键将不会删除该区域。 delete-selection-mode
是改变这种行为的次要模式。
使用鼠标突出显示区域时,无论使用的是否为delete-selection-mode
,使用退格键将删除用鼠标突出显示的区域。从手册第25.1.1:
“虽然该区域仍处于活动状态,打字或删除该 区域中的文本,并停用该商标,这种行为遵循其他 图形程序,建立了一个惯例,它确实而不是适用于以任何其他方式设置区域时, 包括移位选择(* note Shift Selection::)。
基于此,听起来就像使用鼠标选择区域。那是对的吗?当使用shift-select-mode
或仅使用标记和点时,是否会出现相同的行为?
嗨,实际上,我只使用键盘,点和标记(不移位)...移位选择模式为零。 – hatmatrix 2010-08-30 13:59:57
那么,有些东西是歪斜的。我在OS X上使用GNU Emacs 23.2.1,当我以任何方式使用键盘来突出显示一个区域(''transient-mark-mode''或不)时,我在该区域突出显示时退格,我没有得到这种行为。如果我能找出一些可能导致您遇到问题的设置,我会再次发布。 – 2010-08-30 14:30:23
谢谢。是的,很奇怪。我现在发现'delete-forward-char'也以同样的方式“破碎”! – hatmatrix 2010-08-30 14:43:15
如前所述,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在正常模式下跺脚
显然,这使得它的工作罚款的退格。即使在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中的文件:
删除选择模式是 `delsel.el互动编译Lisp函数”。
(删除选择模式&可选ARG)
切换删除选择模式。使用前缀ARG,如果ARG为正,则将Delete Selection 模式设为开,如果ARG不是正值,则将其关闭。
当启用删除选择模式时,瞬态标记模式也是 启用,如果选择 活动,则键入的文本会替换选择。否则,键入的文本仅插入点,不管 任何选择。
我认为这是标准的行为,即使区域被突出显示,emacs也会删除一个字符。所以我会查看我的'.emacs',以便找到禁用它的东西。 – phimuemue 2010-08-30 12:54:24
嗯。我也认为是这样。退格键被绑定到'delete-backward-char',所以我不知道发生了什么。我无法在我的.emacs文件中找到任何指向它的东西,但它发生在所有模式中,因此它必须是很大的东西。 – hatmatrix 2010-08-30 13:01:23
您是否尝试过通过'emacs -Q'启动emacs(它禁止加载'.emacs '所以你可以检查它是否确实是默认行为)? – phimuemue 2010-08-30 13:12:53