2010-08-30 72 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不是正值,則將其關閉。

當啓用刪除選擇模式時,瞬態標記模式也是 啓用,如果選擇 活動,則鍵入的文本會替換選擇。否則,鍵入的文本僅插入點,不管 任何選擇。