Làm thế nào để lưu một bản sao của bộ đệm vào một tập tin?


9

Tôi muốn có thể lưu một bản sao (hoặc ảnh chụp nhanh) của bộ đệm vào một tệp. Hành vi sẽ tương tự write-file, ngoại trừ việc nó sẽ không đặt bộ đệm để truy cập tệp này.

Đối với một usecase, hãy tưởng tượng rằng bạn có một phiên shell và bạn muốn nhanh chóng lưu tất cả vào một tệp nhật ký. Không nên đổi tên bộ đệm (để các chức năng dựa vào tên bộ đệm vẫn hoạt động) và không nên truy cập tệp (để tệp không bị ghi đè và không có cảnh báo khi thoát emacs).

Tôi có thể tưởng tượng một vài cách bẩn thỉu khi làm điều này, tôi sẽ đăng một bài dưới dạng tự trả lời, nhưng đọc từ hướng dẫn, toàn bộ hệ thống "tệp đã truy cập" phức tạp hơn vẻ ngoài của nó và tôi đoán nó rất dễ để phác thảo giải pháp sai. Có một cách ẩn, tích hợp, để đạt được điều này?

Câu trả lời:


18

Chỉ cần chọn toàn bộ bộ đệm ( C-x h) và sử dụng write-region.


3
Bạn không cần phải chọn văn bản đệm, nếu bạn đang sử dụng write-regiontừ Lisp (ví dụ: trong lệnh của riêng bạn). Chỉ cần vượt qua nó (point-min)(point-max), cùng với tên tập tin.
vẽ

2
C-x h M-x write-region
Jakub Narębski

Cảm ơn bạn đã chọn bộ đệm và M-x write-regionlệnh thực tế .
Grant Bowman

0

Làm bẩn elispnhững gì tôi muốn làm:

(defun tv/copy-buffer-to-file (filename)
  (interactive "sFile to write? ")
  (let ((bufname (buffer-name)))
    (set-visited-file-name filename)
    (save-buffer)
    (set-visited-file-name nil)
    (rename-buffer bufname)))

Điều này có vẻ rắc rối hơn mức cần thiết, vì chúng tôi phải chăm sóc cả tệp đã truy cập và tên bộ đệm và chúng tôi không thể chắc chắn rằng chúng tôi không quên bất cứ điều gì khác.

Các giải pháp khác liên quan đến sao chép văn bản bộ đệm trong bộ đệm mới, sau đó lưu và giết bộ đệm đó có thể sẽ hoạt động tốt hơn, nhưng sau đó tôi lo lắng về các vấn đề hiệu năng với bộ đệm lớ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.