我找不到防止刪除整個區域的設置,當您將其突出顯示並且您退回到空格...(我只是希望它刪除一個字符,即使區域被突出顯示。)我已經有當區域高亮顯示時只刪除一個字符
(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