Ответ 1
Найдено:
(setq delete-active-region nil)
- ответ. Спасибо всем за то, что он со мной справился!
Я не могу найти параметр, который предотвращает удаление целого региона, когда вы его выделили, и вы нажмете backspace... (Я просто хочу, чтобы он удалял один символ, даже если область выделена.) У меня уже есть
(delete-selection-mode 0)
и в настраиваемых переменных (у меня включен режим cua-mode для его функций прямоугольника),
'(cua-delete-selection nil)
но это поведение, которое я получаю. Я что-то пропустил?
Найдено:
(setq delete-active-region nil)
- ответ. Спасибо всем за то, что он со мной справился!
Emacs имеет другое поведение в зависимости от того, было ли выделение сделано с помощью мыши или клавиатуры.
Даже в transient-mark-mode
, если вы установите метку и переместите точку, использование backspace не удалит область. delete-selection-mode
- это второстепенный режим, который изменяет это поведение.
При использовании мыши, чтобы выделить регион, независимо от delete-selection-mode
, использование backspace удалит область, выделенную мышью. Из раздела 25.1.1 руководства:
"Пока регион остается активным, введите или удалите текст в этом область и деактивирует знак; это поведение следует за конвенцией, установленной другими графические программы, и это не применяется, когда вы устанавливаете регион любым другим способом, включая сдвиг-выбор (* note Shift Selection::).
Исходя из этого, похоже, что вы выбираете регион с помощью мыши. Это верно? Возникает ли такое же поведение при использовании shift-select-mode
или просто с использованием метки и точки?
В ELisp 0
считается истинным.
Попробуйте установить
(setq delete-selection-mode nil)
Как уже отмечалось, 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))
По-видимому, это заставляет работать отлично для backspace. Даже в режиме 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:
delete-selection-mode - это интерактивная скомпилированная функция Lisp в `Delsel.el ".
(режим удаления-выбора и дополнительный ARG)
Переключить режим удаления. С префиксом ARG, выберите Delete Selection режим включен, если ARG положительный, выключен, если ARG не является положительным.
Когда включен режим" Удалить выделение", режим Transient Mark также Включенный и напечатанный текст заменяет выделение, если выбор активный. В противном случае введенный текст просто вставлен в точку независимо от любой выбор.