Ответ 1
Обновление февраль 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, области маркировки и уничтожения становятся естественными, поэтому вы можете найти первый вариант. Если нет, последний вариант ближе всего к тому, что вы хотите.
EDIT: только что нашел это на emacs wiki, это лучше, чем мой вариант 4:
(defun my-clear ()
(interactive)
(let ((comint-buffer-maximum-size 0))
(comint-truncate-buffer)))