Lợi ích của việc sử dụng bộ đệm gián tiếp là gì? Trong hoàn cảnh nào chúng hữu ích?
Lợi ích của việc sử dụng bộ đệm gián tiếp là gì? Trong hoàn cảnh nào chúng hữu ích?
Câu trả lời:
Để xem và chỉnh sửa nhiều vị trí của cùng một bộ đệm. Vì vậy, bạn không phải cuộn một bộ đệm dài mà chỉ cần chuyển cửa sổ sang vùng hiển thị. Mỗi bộ đệm nhân bản cũng có vòng đánh dấu khác nhau, thu hẹp và các thuộc tính bộ đệm khác. Nếu bạn không sử dụng bộ đệm gián tiếp mà tạo một cửa sổ khác có cùng bộ đệm, thì mọi thứ sẽ được chia sẻ và bạn không thể thực hiện các tính năng nâng cao khác ngoài việc xem và chỉnh sửa các vị trí khác nhau. Ví dụ: với bộ đệm gián tiếp, bạn có thể gấp tất cả khối mã, tạo hiệu quả "cây thẻ" mà không ảnh hưởng đến bộ đệm ban đầu. Sử dụng một cửa sổ, cả hai bộ đệm trong cả hai cửa sổ đều được gấp lại vì cả hai bộ đệm đều giống nhau.
Tóm lại, bộ đệm gián tiếp là một bộ đệm hoàn toàn khác xảy ra để chia sẻ cùng một văn bản và tệp trong bộ đệm ban đầu của bạn, vì vậy khi bạn lưu bộ đệm nhân bản, nó cũng lưu tệp gốc của bạn.
Một trường hợp sử dụng đang sử dụng một chế độ chính khác nhau trên một phần của tệp.
Chẳng hạn, tôi đã có lúc làm việc với các tài liệu xml có mã bên trong các phần tử nhất định. Tôi muốn có thể chỉnh sửa toàn bộ tài liệu như thể là xml, nhưng vẫn có tất cả các tính năng chế độ chính cho ngôn ngữ lập trình được nhúng trong một số phần tử nhất định, vì vậy tôi đã thu hẹp vào phần thân của các phần tử đó trong bộ đệm gián tiếp đang chạy chế độ chính phù hợp.
Đây là một chức năng từ cấu hình của tôi mà tôi sử dụng để làm điều này:
(defun indirect-region (start end)
"Edit the current region in another indirect buffer.
Prompt for a major mode to activate."
(interactive "r")
(let ((buffer-name (generate-new-buffer-name "*indirect*"))
(mode (intern
(completing-read
"Mode: "
(mapcar (lambda (e)
(list (symbol-name e)))
(apropos-internal "-mode$" 'commandp))
nil t))))
(pop-to-buffer (make-indirect-buffer (current-buffer) buffer-name))
(funcall mode)
(narrow-to-region start end)
(goto-char (point-min))
(shrink-window-if-larger-than-buffer)))
Lưu ý: điều này không hoàn hảo, những thứ như khóa phông chữ đòi hỏi công việc bổ sung đặc biệt để sử dụng trong kịch bản này.
Bộ đệm gián tiếp cung cấp cho bạn nhiều chế độ xem của cùng một bộ đệm, đặc biệt là nhiều hẹp, mỗi chế độ hoạt động, trong nhiều khía cạnh, giống như một bộ đệm riêng.
Như Bình luận cho thư viện narrow-indirect.el
nói:
Bạn có thể sử dụng bộ đệm gián tiếp nhiều hơn bạn nghĩ. Ví dụ, bạn có thể sử dụng các bản sao được lấy từ các phần của bộ đệm Dired để cung cấp cho bạn các chế độ xem (hoạt động) hữu ích vào danh sách thư mục. Chỉ có một vài khóa / lệnh (chẳng hạn như
g
để cập nhật danh sách) không hoạt động, bởi vì chúng phụ thuộc vào chế độ xem của toàn bộ bộ đệm Dired. Thử nghiệm, và bạn chắc chắn sẽ tìm thấy những cách sử dụng mới thú vị cho bộ đệm gián tiếp.