2010-09-24 20 views
11

Điều tôi thường làm trong Emacs là cắt một đoạn văn bản, và sau đó thay thế một đoạn khác bằng văn bản đã cắt. Vì vậy, nói rằng tôi đã có văn bản tôi muốn để yank là mục cuối cùng trong kill-ring của tôi. Tôi giật nó vào nơi mới, sau đó giết văn bản đã ở đó. Nhưng bây giờ văn bản bị giết là mục mới nhất trong số kill-ring. Vì vậy, lần sau tôi muốn giật món hàng đầu tiên, tôi phải làm C-y M-y. Sau đó, lần tiếp theo có hai mục gần đây hơn trong số kill-ring, vì vậy tôi phải làm C-y M-y M-y, v.v.Tôi có thể giữ cùng một mục cho yanks trong Emacs không?

Tôi đoán có cách tốt hơn để thực hiện việc này. Ai đó có thể khai sáng cho tôi được không?

+0

Không biết bất kỳ cách nào khác để thực hiện. Bạn có thể có thể tiết kiệm trong một đăng ký nhưng tôi đã không sử dụng bản thân mình. – cristobalito

+0

Bạn đã gặp phải vấn đề chính với vòng kill-ring. Mục được sử dụng gần đây nhất có nhiều khả năng được sử dụng lại. Vì vậy, bạn không muốn đặt hàng vòng theo thứ tự thời gian. Nhập gói LRU-yank của tôi. https://github.com/lewang/le_emacs_LRU_yank Tôi đã sử dụng các công cụ hữu ích với ít thao tác nhấn phím hơn. –

Trả lời

6

Bạn nên sử dụng delete-region thay vì kill-region.

delete-region xóa khu vực mà không đặt nó vào vòng giết. Nó được ràng buộc với <menu-bar> <edit> <clear> theo mặc định.

Nếu bạn chỉ muốn sử dụng các ràng buộc mặc định mà không cần sử dụng trình đơn, bạn có thể sử dụng delete-rectangle với C-xrd nhưng nó hoạt động trên hình chữ nhật. Có thể sử dụng nó trên một dòng đơn như delete-region.

+0

Cảm ơn. Tôi đang tìm cách để làm điều đó mà không cần phải làm 'M-x kill-region' mỗi lần, và tôi không muốn thêm một keybinding mới. Không có cách nào để làm điều này với keybindings tiêu chuẩn? – Skilldrick

+0

Bạn có thể thực hiện truy vấn thay thế (M-%) bằng cách giật mạnh trong bộ minibuffer mà bạn muốn sử dụng để thay thế các thứ khác: M-% thestringtoreplace RET C-y RET! –

+0

@ Jérôme Vâng, tôi nghĩ bạn nói đúng. Vấn đề duy nhất với điều đó là chuỗi thay thế phải giống nhau mỗi lần, trong khi tôi muốn có thể tự thay thế một tải các thứ khác nhau bằng cùng một chuỗi. Tôi nghĩ đây là một việc dễ làm hơn với các trình soạn thảo văn bản chuẩn (tức là sử dụng Ctrl-C rồi Ctrl-V) so với Emacs. – Skilldrick

2

tôi đã viết chức năng này để bật mục mới nhất off the kill-ring:

(defun my-kill-ring-pop() 
    "Pop the last kill off the ring." 
    (interactive) 
    (when kill-ring 
    (setq kill-ring (cdr kill-ring))) 
    (when kill-ring-yank-pointer 
    (setq kill-ring-yank-pointer kill-ring)) 
    (message "Last kill popped off kill-ring.")) 

Vì vậy, sau khi tôi giết một cái gì đó tôi không muốn giữ lại, tôi nhấn một phím mà các cuộc gọi này.

+0

Cảm ơn - đó là một điều nhỏ nhặt tiện dụng để có. – Skilldrick

+0

Bạn đã liên kết điều gì với sự tò mò? – drysdam

+0

@drysdam C-c k scottfrazer

9

Một số lựa chọn thay thế:

  1. Bật delete-selection-mode, và sử dụng C-d hay xóa xóa khu vực mà không cần chạm vào kill-ring.
  2. Sử dụng C-x r s i để lưu văn bản để đăng ký i, và sau đó, C-x r i i để chèn văn bản đã lưu.
  3. Nếu mẫu văn bản được thay thế có thể được chụp theo cụm từ thông dụng, hãy sử dụng query-replace-regexp (C-M-%).
+0

Tốt - cảm ơn. Có bao giờ là một điểm mà bạn có thể ngừng học Emacs ?! – Skilldrick

+0

Trong trường hợp này, tôi sử dụng thanh ghi. Chúng thường có ích khi bạn có thể có một vài trong số chúng! – user272735

4

Một trong những bí mật lâu đời nhất và giữ tốt nhất trong Emacs - dunno why: Emacs có lựa chọn thứ.

Và đây chính xác là điều tốt. Nó tiết kiệm một lựa chọn văn bản để bạn sử dụng, hơn và hơn.

Chọn một số văn bản, sau đó nhấn vào chữ cái thứ hai để thay thế. Lặp lại ở nơi khác. Thông thường, điều này thuận tiện hơn, linh hoạt hơn và chính xác hơn một cái gì đó như truy vấn thay thế.

Hãy xem, vì lợi ích của riêng bạn - có thể nó sẽ dừng lại là một tính năng ít được biết đến như vậy ... http://www.emacswiki.org/emacs/SecondarySelection

0

liên quan vấn đề này là M-x browse-kill-ring.Nếu bạn sử dụng M-x anything, bạn cũng có thể sử dụng M-x anything-show-kill-ring.

Các vấn đề liên quan