Tại sao sử dụng bộ đệm gián tiếp?


Câu trả lời:


16

Để 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.


3
Tôi đồng ý rằng bộ đệm gián tiếp có lợi ích. Nhưng điểm đầu tiên của bạn không cần bộ đệm là gián tiếp. Bạn có thể xem và chỉnh sửa nhiều vị trí của cùng một bộ đệm ngay cả khi cùng một bộ đệm được mở trong hai cửa sổ. Nhưng có, thu hẹp độc lập, gấp, vv là những tính năng mạnh mẽ của một bộ đệm gián tiếp theo ý kiến ​​của tôi.
Kaushal Modi

5
Cũng chỉnh sửa cùng một bộ đệm với nhiều chế độ, (kết hợp bộ đệm gián tiếp với thu hẹp). Bạn có thể chỉnh sửa một số phần của bộ đệm với chế độ đánh dấu, phần khác với chế độ python, phần khác với chế độ json
freakhill

Bạn có thể thấy nhiều vị trí chỉ sử dụng nhiều cửa sổ, nhưng vì chỉ có một giá trị điểm trong tình huống này, nên bộ đệm chuyển đổi sẽ không bảo toàn vị trí trong cả hai cửa sổ, nhưng chỉ một.
trị

9

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.


3

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.elnó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.

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.