Làm thế nào để tự động điều chỉnh khoảng trắng sau khi yanks?


7

Khi chỉnh sửa văn bản ngôn ngữ của con người và di chuyển các đoạn văn bản xung quanh, tôi thường gặp phải vấn đề là khoảng trắng di chuyển ở đầu hoặc cuối của một đoạn không phù hợp với vị trí mới. Ví dụ, hãy xem xét đoạn này:

This is the first sentence.  This is the second sentence.  These
three sentences are the whole paragraph.

Nếu tôi di chuyển câu cuối cùng trước câu đầu tiên bằng kill + yank, tôi có khoảng trắng ở đầu hoặc cuối. Một vấn đề tương tự xảy ra trong bảng liệt kê.

Một trường hợp sử dụng khác là nếu tôi muốn chèn một từ hoặc biểu thức trong vòng kill mà không có bất kỳ khoảng trắng ở cuối hoặc dấu nào. Ví dụ, hãy xem xét từ "rất" trong vòng giết và câu sau:

Such a minor mode would be useful.

Sau khi kéo dài, điều này có thể trở thành sai lầm:

Such a minor mode would bevery useful.

Có cách nào để có khoảng trắng trong văn bản của con người được điều chỉnh tự động không?

Câu trả lời:


3

Đây là một chức năng, delete-leading-whitespace-on-lineđể làm như tên cho thấy:

(defun delete-leading-whitespace-on-line ()
  "Delete whitespace at the beginning of the current line."
  (interactive)
  (let ((start (line-beginning-position))
        (end (line-end-position)))
    (save-excursion
      (delete-whitespace-rectangle start end nil))))

Đối với đuôi trắng, tôi sử dụng M-x delete-trailing-whitespace.

Để kích hoạt những thứ này sau khi yanks, bạn có thể làm một cái gì đó như:

(defun yank-and-trim-whitespace ()
  "Yank and then trim whitespace on the line."
  (interactive)
  (yank)
  (delete-leading-whitespace-on-line)
  (delete-trailing-whitespace))

và ràng buộc nó như:

(global-set-key "\C-y" 'yank-and-trim-whitespace)

Bạn cũng có thể muốn dùng thử chế độ dọn dẹp khoảng trắng của Steve Purcell , một chế độ nhỏ:

sẽ gọi một cách thông minh việc dọn dẹp khoảng trắng trước khi bộ đệm được lưu.

PS Tài khoản GitHub của anh ấy là một kho tàng những món quà của Emacs.


Tôi chưa có danh tiếng, nhưng đây là một liên kết đến tài liệu thích hợp: gnu.org/software/emacs/manual/html_node/emacs/ Lỗi
yurrriq

call-interactivelycần thiết ở đây không? Bạn có thể không chỉ gọi các chức năng?
erikstokes

@erikstokes, bắt tốt. Những thứ call-interactivelydư thừa.
yurrriq

Tôi nghĩ rằng sử dụng call-interactivelyở đây sẽ làm cho nó hoạt động với yank-pop.
Politza 04/07/2015

1

Điều này dường như để làm những gì bạn đã yêu cầu. Ngược lại nếu đã có thêm khoảng trắng, nó sẽ giữ chúng như trước.

  (defun yank-and-adjust-whitespace ()
  (interactive)
  (if (equal (char-after) ?\s)
      (progn
        (insert " ")
        (yank))
    (if (eolp) (if (bolp) (yank)
        (if (equal (char-before) ?\s)
            (yank)
          (insert " ")
          (yank)))
      (yank)
      (insert " "))))

Giống như câu trả lời của Eric Bailey, bạn có thể liên kết các phím tắt dưới đây.

(global-set-key "\C-y" 'yank-and-adjust-whitespace)

Sử dụng eolp/bolpđã được mượn từ https://emacs.stackexchange.com/a/13741/ .


@wasamasa cảm ơn vì đã chỉnh sửa, tôi thấy bạn đã đổi ? thành ?\s. Dường như cả hai đều làm việc. Tôi quan tâm để biết về sự khác biệt của họ.
Tên

1
Đúng, cả hai đều tương đương. Hướng dẫn sử dụng khuyến nghị ?\smặc dù bởi vì nó trông ít gây nhầm lẫn hơn ? và đảm bảo rằng bạn có nghĩa là phù hợp với một không gian thay vì nhầm lẫn .
wasamasa
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.