program tip

emacs 쉘을 사용하는 동안 쉘을 지우는 명령

radiobox 2020. 11. 14. 10:06
반응형

emacs 쉘을 사용하는 동안 쉘을 지우는 명령


emacs에서 쉘을 사용하는 동안 쉘을 지우는 내장 명령이 있습니까?

그렇지 않은 경우 동일한 작업을 수행하는 elisp 함수가 있습니까?


2015 년 2 월 업데이트

이제 Emacs (버전 25+)에는 기본적으로 comint-clear-buffer바인딩 된 명령이 있으며 C-c M-o여기에서 필요한 작업을 수행하며 아마도 원래 아래에 게시 한 답변보다 낫습니다.

고려할 옵션 :

  1. C-l버퍼를 최근에 넣습니다. 반복적으로 누르면 버퍼가 순환하므로 해당 포인트가 버퍼의 상단, 중간 또는 하단에 나타납니다. 상단에서 멈 추면 버퍼가 지워진 것처럼 보이지만 모든 텍스트는 여전히 표시되지 않습니다.

  2. C-x h전체 버퍼를 표시 한 후이를 C-w죽입니다. 이것은 마지막 프롬프트도 죽이지 만 다음 명령을 입력하면 프롬프트가 다시 표시됩니다.

  3. 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를 사용한 후에는 영역을 표시하고 죽이는 것이 자연스러워 지므로 첫 번째 옵션으로 충분할 것입니다. 그렇지 않은 경우 마지막 옵션이 원하는 항목에 가장 가깝습니다.

편집 : 방금 emacs wiki에서 이것을 찾았습니다. 내 옵션 4보다 낫습니다.

(defun my-clear ()
  (interactive)
  (let ((comint-buffer-maximum-size 0))
    (comint-truncate-buffer)))

여기에 제안 된 대부분의 솔루션은 EShell 모드 에서 작동하지 않습니다 !

EShell 모드 버퍼는 읽기 전용이므로 kill 및 erase 명령이 작동하지 않습니다.

당신이 보통 사용하려면 Ctrl- Leshell 터미널 취소, 당신이 추가 .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)))

Note: To better emulate the standard Ctrl-L, after clearing the buffer, the command will restore the initial prompt.


With your point in the *shell* buffer, run:

C-c M-o

or

M-x comint-clear-buffer

NOTE: This also works in *Python* shell, but doesn't seem to work in *eshell*.


AFAIK you can't clear when you start as M-x shell but if you do M-x term you get a fully functional terminal where clear works as intended. I may be wrong on this though but personally I use M-x term now since it is fully functioning.


If you find, you can't use erase-buffer and shows text is read only. You can use following replace function.

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

Or... you can truncate the buffer.

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

참고URL : https://stackoverflow.com/questions/7733668/command-to-clear-shell-while-using-emacs-shell

반응형