Обновление за февраль 2015 года
Только что заметил, что Emacs сейчас (версия 25+) имеет команду comint-clear-buffer
, привязанную к C-c M-o
по умолчанию, которая делает то, что нам нужно, и, вероятно, предпочтительнееответы, которые я первоначально разместил ниже.
Варианты для рассмотрения:
C-l
перенастроит буфер.Повторное нажатие приводит к циклическому переключению буфера, так что точка появляется в верхней, средней или нижней части буфера.Когда он останавливается сверху, буфер выглядит так, как будто он очищен, хотя весь текст все еще там, вне поля зрения.
C-x h
отмечает весь буфер, после чего C-w
убивает это.Это также убивает последнее приглашение, но после ввода следующей команды вы получаете приглашение обратно.
Вы также можете использовать erase-buffer
, который не связан с ключомпо умолчанию, но это легко сделать (вы также можете использовать M-x erase-buffer
:
(defun my-shell-hook ()
(local-set-key "\C-cl" 'erase-buffer))
(add-hook 'shell-mode-hook 'my-shell-hook)
Это привязывает его к C-c l
; вы можете выбрать то, что вам нравится.
Возможно быстрое исправление для повторного создания вашего приглашения после очистки:
(defun my-clear ()
(interactive)
(erase-buffer)
(comint-send-input))
(defun my-shell-hook ()
(local-set-key "\C-cl" 'my-clear))
(add-hook 'shell-mode-hook 'my-shell-hook)
После того, как вы некоторое время используете emacs, разметка и уничтожение областей становятся естественными, так что вы можетенайти первый вариант достаточно.Если нет, последний вариант ближе всего к тому, что вы хотите.
РЕДАКТИРОВАТЬ: только что нашел это в вики emacs, это лучше, чем мой вариант 4:
(defun my-clear ()
(interactive)
(let ((comint-buffer-maximum-size 0))
(comint-truncate-buffer)))