Öldürme halkası eklemeden geri tuşu


12

Crtl + Backspace veya Ctrl + Del tuşlarını kullanarak silinen metni öldürme halkasına ekler.
Bunun olmasını nasıl önleyebilirim? Silindiğinde her bir metin parçasının kill halkasına gönderilmesine gerek yok.

Yan soru: Bu varsayılan ayarın amacı nedir? :)


Yan soru hakkında: muhtemelen silmeden geçirdiğiniz şeyin yedek bir kopyasına sahip olmak undo. Yine de vahşi tahmin.
Manuel Uberti

Yanıtlar:


7

Belgelere göre:

<C-delete>içinde etkileşimli bir derlenmiş Lisp işlevi olan kill-word (global haritada bulunur) komutunu çalıştırır ‘simple.el’.

Buna bağlı <C-delete>, M-d.

(öldürme kelimesi ARG)

Bir kelimenin sonuna kadar karakterleri ileriye doğru öldür. ARG argümanı ile bunu birçok kez yapın.

Şimdi kaynak koduna göz atalım:

(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))))

Daha sonra, kill-regionfonksiyonun belgelerinde şunları buluyoruz:

Nokta ve işaret arasındaki metni öldürün ("kesin").
This deletes the text from the buffer and saves it in the kill ring. [Yank] komutu oradan alabilir. (Bölgeyi öldürmeden kaydetmek istiyorsanız, [kill-ring-save] kullanın.)

[...]

Lisp programları metni öldürmek için bu işlevi kullanmalıdır. (Metin silmek için kullanın delete-region.)

Şimdi, daha ileri gitmek isterseniz, kill-ring'e kopyalamadan silmek için kullanabileceğiniz bazı işlevler şunlardır:

(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'ın izniyle


teşekkürler, bu çözüldü. Yan soru ne olacak? : p
Daniel Hitzel

3
@DanielHitzel Üzgünüm, yan soruya cevabım yok :)
Nsukami _

Yani yalnız değilim: D
Daniel Hitzel

4

Emacs 24, herhangi bir konfigürasyon olmadan, herhangi bir metni öldürme halkasına eklemeden ve ardından Backspaceveya tuşuna basarak silebilirsiniz Delete. İşaret etkin olduğunda, bu tuşlar imleçten önceki / sonraki karakteri silmek yerine bölgeyi siler.

Yani, silmek istediğiniz metnin bir ucuna gidin, Ctrl+ tuşuna basın Space, diğer ucuna gidin ve vurgulanan bölgeyi silmek için Backspace(veya Delete) tuşuna basın . Veya bir uca Shiftgidin, diğer uca gitmek için hareket tuşlarını basılı tutun ve tuşuna basın Backspace.


MacOS'ta Emacs 25.1 ile benim için durum böyle değil.
NVaughan

0

Aynı sorunu yaşadım ve bu şekilde daha kolay çözdüm:

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

Çağırma (backward-delete-char-untabify 1 nil), Emacs'a bir karakter ( 1parametre budur) geriye doğru silmelerini ve halkaya kopyalamaktan kaçınmasını söyler ( nilparametre budur). Bir fonksiyonu bir tuşa parametrelerle bağladığınız için lambda (yani anonim) fonksiyonuna ihtiyacınız vardır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.