Cách sao chép hình chữ nhật bị giết vào vòng giết


11

Tôi thường trích xuất một hình chữ nhật của văn bản từ một bộ đệm, nhưng sau đó tôi thấy tôi muốn kéo văn bản như thể nó không phải là một hình chữ nhật. Có cách nào để thêm hình chữ nhật bị giết hiện tại vào vòng kill không?

Các tay GNU Emacs đã cho biết:

Killing giết chết một hình chữ nhật không giết theo nghĩa thông thường; hình chữ nhật không được lưu trong vòng kill, nhưng ở một nơi đặc biệt chỉ ghi lại hình chữ nhật gần đây nhất bị giết. Điều này là do việc kéo một hình chữ nhật rất khác với văn bản tuyến tính kéo dài mà các lệnh yank khác nhau phải được sử dụng. Yank-popping không được xác định cho hình chữ nhật.

Tuy nhiên, về cơ bản tôi có thể có được hành vi tôi muốn với

  • M-> đi đến cuối bộ đệm
  • C-x r y hình chữ nhật
  • C-x C-x điểm trao đổi và đánh dấu (chọn các dòng mới được đánh dấu)
  • C-w giết lựa chọn vào vòng giết

Có cách nào tốt hơn để biến một hình chữ nhật bị giết thành một mục vòng giết không?


Các giải pháp liên kết không phải là những gì bạn yêu cầu, nhưng nó yanks hình chữ nhật giống như bạn muốn: emacs.stackexchange.com/a/46352/15749
Jue

Câu trả lời:


6

Nếu tôi hiểu câu hỏi của bạn, bạn đang tìm kiếm một cái gì đó như thế này:

(defun youngfrog/copy-rectangle-to-kill-ring (start end)
  "Saves a rectangle to the normal kill ring. Not suitable for yank-rectangle."
  (interactive "r")
  (let ((lines (extract-rectangle start end)))
    (with-temp-buffer
      (while lines ;; insert-rectangle, but without the unneeded stuff
        ;; (most importantly no push-mark)
        (insert-for-yank (car lines))
        (insert "\n")
        (setq lines (cdr lines)))
      (kill-ring-save (point-min) (point-max)))))

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


3

Không chắc có gì đặc biệt khi có hình chữ nhật trong vòng kill, nhưng nếu bạn nâng cấp lên Emacs-24.4, thì bạn có thể làm: C-x SPC .... M-wchọn một hình chữ nhật và đặt nó vào vòng kill. Sau đó C-ysẽ kéo hình chữ nhật đó (giống như C-x r yvậy, tho).


Có hai điều về chiếc nhẫn giết người là "đặc biệt". Điều quan trọng nhất (với tôi) là cách các vật phẩm từ vòng tiêu diệt được kéo mạnh. Nói một cách đơn giản, yank chuyển văn bản hiện có xuống thay vì dịch nó sang phải. Sử dụng vòng giết cũng có lợi ích phụ là duy trì lịch sử văn bản bị giết. Có vẻ như 24.4 có thể cung cấp lợi ích thứ hai nhưng không phải là thứ nhất.
nispio

Thật vậy, trong trường hợp đó, hành vi mới của 24.4 cải thiện phần mà bạn không quan tâm.
Stefan

1

Ban đầu tôi cảm thấy khó chịu vì thiếu một giải pháp tích hợp cho vấn đề này, sau đó nhận ra rằng có một giải pháp tích hợp: kill-hình chữ nhật.

Nói rằng bạn có văn bản như

AAA BBBBBBBBB
AAA BBB
AAA BBBBBBB

Nhưng muốn phần 'B' của văn bản ở một nơi khác, như giữa các dòng C và D này:

CCCCC
CCC
DDDD
DD

Nếu bạn sao chép hình chữ nhật B ( C-x r M-w) và sau đó đặt điểm ở 'D' đầu tiên, sau đó kéo hình chữ nhật trở lại ( C-x r y), bạn sẽ kết thúc bằng

CCCCC
CCC
BBBBBBBBBDDDD
BBB      DD
BBBBBBB  

nơi bạn thực sự muốn

CCCCC
CCC
BBBBBBBBB
BBB
BBBBBBB
DDDD
DD

Việc sao chép hình chữ nhật của 'B' và kéo chúng sang vị trí mới có vẻ tự nhiên, nhưng một giải pháp tốt hơn là chỉ sao chép các dòng 'A và' B 'và kéo chúng toàn bộ giữa' C 'và' D 'dòng.

Sau đó, đánh dấu hình chữ nhật chứa 'A và sử dụng kill-rectangle( C-x r k) để kết thúc với kết quả mong muốn.

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.