Команду, чтобы очистить оболочки при использовании emacs'а
есть ли встроенная команда для очистки оболочки при использовании оболочки в emacs?
Если нет, есть ли функция elisp для достижения того же?
6 ответов:
Обновление Февраль 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, это лучше, чем мой вариант 4:
(defun my-clear () (interactive) (let ((comint-buffer-maximum-size 0)) (comint-truncate-buffer)))
большинство предлагаемых здесь решений не будет работать в решение eshell режим!
буфер режима EShell доступен только для чтения, поэтому команды kill и erase не будут работать.
использовать ваш обычный Ctrl -L чтобы очистить терминал eshell, добавьте это в свой
.init
file:(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, после очистки буфера, команда восстановит начальное приглашение.
С вашей точки
*shell*
буфер, выполните:
C-c M-o
или
M-x comint-clear-buffer
Примечание: это также работает в
*Python*
оболочка, но, кажется, не работает в*eshell*
.
AFAIK вы не можете очистить, когда вы начинаете как M-x shell, но если вы делаете M-x term, вы получаете полностью функциональный терминал, где clear работает по назначению. Я могу ошибаться в этом, но лично я использую термин M-x сейчас, так как он полностью функционирует.