Backspace mà không cần thêm để giết nhẫn


12

Sử dụng Crtl + Backspace hoặc Ctrl + Del sẽ thêm văn bản đã xóa vào vòng khử.
Làm thế nào tôi có thể ngăn chặn điều này xảy ra? Tôi không cần phải gửi từng đoạn văn bản tới vòng giết khi nó bị xóa.

Câu hỏi phụ: Mục đích của cài đặt mặc định này là gì? :)


Về câu hỏi phụ: có thể có một bản sao lưu những gì bạn xóa mà không trải qua undo. Mặc dù đoán hoang dã.
Manuel Uberti

Câu trả lời:


6

Theo tài liệu:

<C-delete>chạy lệnh kill-word (tìm thấy trong bản đồ toàn cầu), là một hàm Lisp được biên dịch tương tác trong ‘simple.el’.

Nó bị ràng buộc với <C-delete>, M-d.

(ARG từ giết)

Giết nhân vật về phía trước cho đến khi gặp phải kết thúc của một từ. Với đối số ARG, làm điều này nhiều lần.

Bây giờ, hãy duyệt mã nguồn:

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

Sau đó, bên trong tài liệu cho kill-regionchức năng chúng ta tìm thấy:

Giết ("cắt") văn bản giữa điểm và dấu.
This deletes the text from the buffer and saves it in the kill ring. Lệnh [yank] có thể lấy nó từ đó. (Nếu bạn muốn lưu vùng mà không giết nó, hãy sử dụng [kill-ring-save].)

[...]

Các chương trình Lisp nên sử dụng chức năng này để giết văn bản. (Để xóa văn bản, sử dụng delete-region.)

Bây giờ, nếu bạn muốn đi xa hơn, đây là một số chức năng bạn có thể sử dụng, để xóa mà không cần sao chép vào 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)

Phép lịch sự của ErgoEmacs


cảm ơn, điều đó đã giải quyết nó Còn câu hỏi phụ thì sao? : p
Daniel Hitzel

3
@DanielHitzel Xin lỗi, tôi không có câu trả lời cho câu hỏi phụ :)
Nsukami _

Vì vậy, tôi không đơn độc: D
Daniel Hitzel

4

Vì Emacs 24, không có bất kỳ cấu hình nào, bạn có thể xóa bất kỳ văn bản nào mà không cần thêm nó vào vòng khử bằng cách chọn nó và sau đó nhấn Backspacehoặc Delete. Khi dấu được kích hoạt, các phím này sẽ xóa vùng thay vì chỉ xóa ký tự trước / sau con trỏ.

Đó là, di chuyển đến một đầu của văn bản bạn muốn xóa, nhấn Ctrl+ Space, di chuyển đến đầu kia và nhấn Backspace(hoặc Delete) để xóa vùng được tô sáng. Hoặc di chuyển đến một đầu, giữ Shifttrong khi bạn sử dụng các phím di chuyển để đi đến đầu kia và nhấn Backspace.


Chà, đó không phải là trường hợp của tôi với Emacs 25.1 trong MacOS.
NVaughan

0

Tôi đã có cùng một vấn đề và giải quyết nó dễ dàng hơn theo cách này:

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

Việc gọi (backward-delete-char-untabify 1 nil)cho Emacs để xóa lùi một char (đó là 1tham số) và nó sẽ không sao chép vào vòng (đó là niltham số). Bạn cần một hàm lambda (tức là ẩn danh) vì bạn đang ràng buộc một hàm với các tham số cho một khóa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.