Xóa tất cả đầu ra trong bộ đệm shell (và * Tin nhắn * quá)


8

Có cách nào dễ dàng để xóa tất cả đầu ra trong shellbộ đệm không? Vì gần đây (tôi tin rằng Emacs 24.4 đã có *shell*bộ đệm này) không thể chỉnh sửa được, chúng hoạt động tương tự như cách thiết bị đầu cuối thông thường hoạt động, tức là chỉ cho phép bạn nối thêm văn bản ở cuối hoặc xóa đầu ra cuối cùng, nhưng bạn không thể thêm văn bản tại bất kỳ nơi nào hoặc loại bỏ một phần của nó tùy ý. Cảm giác như tôi đang thiếu một cái gì đó quan trọng về sự cải thiện này (?). Nó thực sự làm cho nó khó chịu hơn. Tôi đã tìm kiếm các tài liệu cho bộ đệm *shell**Messages*bộ đệm, nhưng không thể tìm thấy đề cập đến câu hỏi.

Ngoài câu hỏi ban đầu: điểm thay đổi này là gì? Đối với tôi điều này hoàn toàn không giống như một sự cải tiến, vì vậy, trừ khi có "một sự bắt", tôi muốn đặt nó thành đọc-ghi làm mặc định.

Tất nhiên, tôi đang nói về Emacs 24.4 , 25.0.50.1.


2
Bạn có vẻ khó chịu về một số "cải tiến", nhưng bạn đã không đề cập đến nó là gì. Từ thẻ của bạn, tôi cho rằng bạn đang đề cập đến Messagesviệc chỉ đọc bây giờ, nhưng tôi không thấy điều đó liên quan đến bộ đệm shell.
Malabarba

1
Bộ shellđệm @Malabarba được sử dụng để hoàn toàn có thể chỉnh sửa. Tức là bạn có thể xóa hoặc thêm văn bản vào bất kỳ lúc nào bạn thích, trong khi bây giờ bạn chỉ có thể nối thêm văn bản ở cuối và bạn cũng không thể xóa văn bản đó ở bất kỳ nơi nào khác. *Messages*cư xử theo cùng một cách.
wvxvw

Câu trả lời:


5

(erase-buffer) sẽ không hoạt động trên bộ đệm comint và shell nếu chúng chỉ đọc.

Đây là defun tôi sử dụng khá thường xuyên để xóa bộ đệm shellish:

(defun clear-comint-buffer ()
  (interactive)
  (let ((old-max comint-buffer-maximum-size))
    (setq comint-buffer-maximum-size 0)
    (comint-truncate-buffer)
    (setq comint-buffer-maximum-size old-max)
    (goto-char (point-max))))

Có lẽ bạn có thể liên kết điều này với s-kcác chế độ có liên quan của mình để bắt chước hành vi xóa của Terminal.app của OSX.

Cập nhật 11/2016

Một nơi nào đó trong sự phát triển của Emacs 25 (và cả trong bản dựng mới nhất của tôi là "26.0.50.1"), (comint-clear-buffer)đã được thêm vào comint-mode, đây là phiên bản ngắn gọn hơn của defun tùy chỉnh của tôi. Đây là nguồn để tham khảo:

(defun comint-clear-buffer ()
  "Clear the comint buffer."
  (interactive)
  (let ((comint-buffer-maximum-size 0))
    (comint-truncate-buffer)))

Giải pháp tích hợp này cũng hoạt động nếu bạn có (setq comint-prompt-read-only t).


Bah, do đó, đây là do thiết kế ... tốt, sau đó điều này trả lời câu hỏi. Có vẻ như tôi sẽ phải tìm giải pháp thay thế M-x shellsau đó: S
wvxvw

@wvxvw M-x erase-bufferhoạt động hoàn hảo trong bộ đệm Shell Mode trong thân cây Emacs và tôi thấy không có lý do gì nó không hoạt động trong 24.4.

@wvxvw Tôi bối rối. Bộ đệm shell của tôi không chỉ đọc và bộ đệm xóa hoạt động tốt trên nó. Có lẽ nó đã được thay đổi trở lại trong Emacs-25, tôi sẽ cố gắng kiểm tra sau.
Malabarba

@Malabarba Tôi đã thử, và nó hoạt động hoàn hảo.

2
@Malabarba / @lunaryorn - Tôi đã tìm thấy lý do tại sao (erase-buffer)cá nhân tôi không làm việc. Tôi có (setq comint-prompt-read-only t)trong cấu hình của mình, cái mà tôi thấy hữu ích vì không ghi đè lời nhắc và do đó (erase-buffer)sủa vào tôi.
waymondo

13

Bạn có thể dọn sạch *Messages*bộ đệm giống như cách bạn luôn có thể, với kill-bufferlệnh. Lần sau khi một tin nhắn được báo hiệu, bộ đệm sẽ được tạo lại một lần nữa.

Lý do mà bộ đệm này chỉ đọc bây giờ, là nó đã được cấp chế độ chính của riêng nó , kế thừa từ special-mode, chỉ đọc. Những lợi thế đằng sau đó là một số. special-modeđược thiết kế để đọc, vì vậy nó có một số phím bấm rất thuận tiện cho các bộ đệm không có nghĩa là phải chỉnh sửa.


Tôi không chắc *shell*phải làm gì với bất cứ điều gì. Nhưng nếu bạn muốn xóa nó, M-x erase-buffer nên làm.

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.