Emacsでシェルを使用しているときにシェルをクリアする組み込みコマンドはありますか?
そうでない場合、同じことを達成するためのelisp機能はありますか?
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をしばらく使用した後は、リージョンのマーキングと削除が自然になるため、最初のオプションで十分な場合があります。そうでない場合は、最後のオプションが必要なものに最も近くなります。
編集:emacs wikiでこれを見つけただけで、私のオプション4よりも優れています:
(defun my-clear ()
(interactive)
(let ((comint-buffer-maximum-size 0))
(comint-truncate-buffer)))
ここで提案されているソリューションのほとんどは、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、バッファをクリアした後、コマンドは最初のプロンプトを復元します。
*Shell*
バッファーにポイントを置いて、次を実行します。
C-c M-o
または
M-x comint-clear-buffer
注:これは*Python*
Shellでも機能しますが、*eshell*
では機能しないようです。
知る限り、M-xシェルとして起動するとクリアできませんが、M-x用語を実行すると、クリアが意図したとおりに機能する完全に機能するターミナルが得られます。私はこれで間違っているかもしれませんが、個人的には完全に機能しているため、今はM-x用語を使用しています。
見つかった場合は、erase-bufferを使用できず、テキストが読み取り専用であることを示します。次の置換機能を使用できます。
(defun eshell/clear ()
"Hi, you will clear the eshell buffer."
(interactive)
(let ((inhibit-read-only t))
(erase-buffer)
(message "erase eshell buffer")))
または...バッファを切り捨てることができます。
(let ((eshell-buffer-maximum-lines 0)) (eshell-truncate-buffer))