1. ホーム
  2. shell

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

2023-10-27 06:17:12

質問

emacsでshellを使用中に、shellをクリアするビルトインコマンドはありますか?

ない場合、同じことを実現する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をしばらく使っていると、領域をマークしたり消したりすることが自然にできるようになるので、最初のオプションで十分だと思うかもしれません。もしそうでなければ、最後のオプションがあなたの望むものに最も近いでしょう。

EDIT: emacs wikiでこれを見つけました。

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