*で囲まれた一時バッファを自動的に閉じるにはどうすればよいですか。たとえばメッセージの場合、完了バッファを閉じる必要があります。使用後にこれらすべてのバッファを手動で強制終了するのは面倒です。
emacs(私たちではなく)によって作成された一時バッファーを閉じる方法はありますか?
本当にそれらのバッファを閉じる必要がありますか?iswitchbのような適切なバッファ切り替え方法を使用する場合は、必要な任意のバッファに直接移動できるため、一時バッファやその他のバッファを気にする必要はありません。
私はあなたが使用するido
かiswitchb
、一時的なバッファに煩わされるのを避けるための提案を2番目にします。これらのバッファーの存在はemacsを使用することの自然な結果であるため、上流で泳ぐことを試みないでください!
一方、開いているバッファのリストが増えていることにイライラしている場合はmidnight.el
、一定期間後に非アクティブなバッファを自動的に閉じるために使用できます。または、ibuffer
不要なバッファをまとめて簡単に選択して閉じるために使用できます。
個人的には、バッファを長時間開いたままにし、時々を使用してバッファを整理し、バッファをすばやく切り替えるibuffer
ことに依存しています。ido
Emacs 24では、に設定ido-use-virtual-buffers
するt
と、ido
閉じたファイルに切り替えて、必要に応じて再度開くことができます。
これらのバッファが邪魔にならないように、キーバインディングを定義して«ユーザーバッファ»と«役に立たないバッファ»を循環させることができます。
http://ergoemacs.org/emacs/effective_emacs.html、セクション«次/前のユーザーバッファの切り替え»
ただし、シェル、コンパイルバッファ、ielmなど、一部の便利なバッファは*で始まります。
ユーザーが言ったように、やなどのスマートなバッファ切り替えパッケージを使用する方がよいでしょiswitchb
うido
。iswitchb
'siswitchb-buffer-ignore
およびido
'sido-ignore-buffers
変数を使用すると、正規表現を使用して無視するバッファーを指定できます。
ただし、これらのバッファを本当に強制終了したい場合は、次のようなプログラムが役立ちます。
(require 'cl)
(defvar kill-star-buffers-except
'("\\`\\*scratch\\*\\'"
"\\`\\*Messages\\*\\'"
"\\` \\*Minibuf-[[:digit:]]+\\*\\'"
"\\` \\*Echo Area [[:digit:]]+\\*\\'")
"Exception list for `kill-star-buffers'")
(defun kill-star-buffers ()
"Kill all star buffers except those in `kill-star-buffers-except'"
(interactive)
(mapc (lambda (buf)
(let ((buf-name (buffer-name buf)))
(when (and
;; if a buffer's name is enclosed by * with optional leading
;; space characters
(string-match-p "\\` *\\*.*\\*\\'" buf-name)
;; and the buffer is not associated with a process
;; (suggested by "sanityinc")
(null (get-buffer-process buf))
;; and the buffer's name is not in `kill-star-buffers-except'
(notany (lambda (except) (string-match-p except buf-name))
kill-star-buffers-except))
(kill-buffer buf))))
(buffer-list)))