Подтвердить что ты не робот

Команда для очистки оболочки при использовании оболочки emacs

Есть ли встроенная команда для очистки оболочки при использовании оболочки в emacs?

Если нет, есть ли функция elisp для достижения того же?

4b9b3361

Ответ 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; вы можете выбрать то, что вам нравится.

  1. Быстрое исправление для повторного создания подсказки после очистки возможно:
    (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)))

Ответ 2

Большинство предлагаемых здесь решений не будут работать в режиме EShell!

Буфер режима EShell доступен только для чтения, поэтому команды kill и erase не будут работать.

Чтобы использовать обычный Ctrl - L для очистки терминала eshell, добавьте его в свой .init файл:

(defun eshell-clear-buffer ()
  "Clear terminal"
  (interactive)
  (let ((inhibit-read-only t))
    (erase-buffer)
    (eshell-send-input)))
(add-hook 'eshell-mode-hook
      '(lambda()
          (local-set-key (kbd "C-l") 'eshell-clear-buffer)))

Примечание. Чтобы лучше эмулировать стандартный Ctrl - L, после очистки буфера команда вернет начальное приглашение.

Ответ 3

AFAIK вы не можете очистить, когда вы начинаете работать как оболочка M-x, но если вы выполняете M-x term, вы получаете полностью функциональный терминал, в котором очистка работает по назначению. Возможно, я ошибаюсь в этом, но лично я использую термин M-x сейчас, поскольку он полностью функционирует.

Ответ 4

С вашей точкой в ​​буфере *shell* запустите:

C-c M-o

или

M-x comint-clear-buffer

ПРИМЕЧАНИЕ. Это также работает в оболочке *Python*, но, похоже, не работает в *eshell*.

Ответ 5

Если вы находите, вы не можете использовать erase-buffer и показывать, что текст читается только. Вы можете использовать следующую функцию замены.

  (defun eshell/clear ()
  "Hi, you will clear the eshell buffer."
  (interactive)
  (let ((inhibit-read-only t))
    (erase-buffer)
    (message "erase eshell buffer")))

Ответ 6

Или... вы можете обрезать буфер.

(let ((eshell-buffer-maximum-lines 0)) (eshell-truncate-buffer))