Резервна область без додавання кільця для вбивства


12

Використовуючи Crtl + Backspace або Ctrl + Del додає видалений текст до кільця вбивства.
Як я можу запобігти цьому? Мені не потрібно, щоб кожен фрагмент тексту надсилався на кільце для вбивства, коли воно видаляється.

Побічне питання: Яка мета цього налаштування за замовчуванням у будь-якому випадку? :)


Про побічне запитання: можливо, мати резервну копію того, що ви видаляєте, не проходячи undo. Дика здогадка, хоча.
Мануель Уберті

Відповіді:


7

Відповідно до документації:

<C-delete>запускає команду kill-word (знайдена на глобальній карті), яка є інтерактивно складеною функцією Lisp в ‘simple.el’.

Це обов'язково <C-delete>, M-d.

(ARG вбивства)

Вбийте символів вперед, поки не зіткнетеся з кінцем слова. З аргументом ARG, робіть це багато разів.

Тепер переглянемо вихідний код:

(defun kill-word (arg)                                                                                                     
  "Kill characters forward until encountering the end of a word.                                                           
With argument ARG, do this that many times."
  (interactive "p")
  (kill-region (point) (progn (forward-word arg) (point))))

Потім, усередині документації для kill-regionфункції ми знаходимо:

Убити ("вирізати") текст між точкою та позначкою.
This deletes the text from the buffer and saves it in the kill ring. Команда [yank] може отримати її звідти. (Якщо ви хочете зберегти регіон, не вбиваючи його, використовуйте [kill-ring-save].)

[...]

Програми Lisp повинні використовувати цю функцію для вбивства тексту. (Щоб видалити текст, використовуйте delete-region.)

Тепер, якщо ви хочете піти далі, це деяка функція, яку ви можете використовувати для видалення без копіювання на kill-ring:

(defun my-delete-word (arg)
  "Delete characters forward until encountering the end of a word.
With argument, do this that many times.
This command does not push text to `kill-ring'."
  (interactive "p")
  (delete-region
   (point)
   (progn
     (forward-word arg)
     (point))))

(defun my-backward-delete-word (arg)
  "Delete characters backward until encountering the beginning of a word.
With argument, do this that many times.
This command does not push text to `kill-ring'."
  (interactive "p")
  (my-delete-word (- arg)))

(defun my-delete-line ()
  "Delete text from current position to end of line char.
This command does not push text to `kill-ring'."
  (interactive)
  (delete-region
   (point)
   (progn (end-of-line 1) (point)))
  (delete-char 1))

(defun my-delete-line-backward ()
  "Delete text between the beginning of the line to the cursor position.
This command does not push text to `kill-ring'."
  (interactive)
  (let (p1 p2)
    (setq p1 (point))
    (beginning-of-line 1)
    (setq p2 (point))
    (delete-region p1 p2)))

; bind them to emacs's default shortcut keys:
(global-set-key (kbd "C-S-k") 'my-delete-line-backward) ; Ctrl+Shift+k
(global-set-key (kbd "C-k") 'my-delete-line)
(global-set-key (kbd "M-d") 'my-delete-word)
(global-set-key (kbd "<M-backspace>") 'my-backward-delete-word)

Надано ErgoEmacs


дякую, що вирішили це. А як щодо побічного питання? : p
Даніель Гітзель

3
@DanielHitzel Вибачте, у мене немає відповіді на побічне запитання :)
Nsukami _

Тож я не один: D
Даніель Гітцель

4

Оскільки Emacs 24, без будь-якої конфігурації, ви можете видалити будь-який текст, не додаючи його до кільця введення, вибравши його, а потім натисніть Backspaceабо Delete. Коли позначка активна, ці клавіші видаляють область замість того, щоб просто видаляти символ перед / після курсору.

Тобто перейдіть до одного кінця тексту, який ви хочете видалити, натисніть Ctrl+ Space, перейдіть на інший кінець та натисніть Backspace(або Delete) видаліть виділену область. Або перейдіть до одного кінця, утримуйте Shift, використовуючи клавіші руху, щоб перейти до іншого кінця, і натисніть Backspace.


Ну, це не так для мене з Emacs 25.1 в MacOS.
NVaughan

0

У мене була та сама проблема і вирішити її легше таким чином:

(global-set-key (kbd "<backspace>")
          '(lambda () (interactive) (backward-delete-char-untabify 1 nil)))

Виклик (backward-delete-char-untabify 1 nil)повідомляє Emacs повернути назад один char (це 1параметр), і він утримується від копіювання на кільце (це nilпараметр). Вам потрібна лямбда (тобто анонімна) функція, оскільки ви прив'язуєте функцію з параметрами до ключа.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.