web-dev-qa-db-ja.com

emacsシェルの使用中にシェルをクリアするコマンド

Emacsでシェルを使用しているときにシェルをクリアする組み込みコマンドはありますか?

そうでない場合、同じことを達成するためのelisp機能はありますか?

66
keeda

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)))
86
Tyler

ここで提案されているソリューションのほとんどは、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、バッファをクリアした後、コマンドは最初のプロンプトを復元します。

27
antonio

*Shell*バッファーにポイントを置いて、次を実行します。

C-c M-o

または

M-x comint-clear-buffer

注:これは*Python* Shellでも機能しますが、*eshell*では機能しないようです。

15
Paul

知る限り、M-xシェルとして起動するとクリアできませんが、M-x用語を実行すると、クリアが意図したとおりに機能する完全に機能するターミナルが得られます。私はこれで間違っているかもしれませんが、個人的には完全に機能しているため、今はM-x用語を使用しています。

8
Jesus Ramos

見つかった場合は、erase-bufferを使用できず、テキストが読み取り専用であることを示します。次の置換機能を使用できます。

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

または...バッファを切り捨てることができます。

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