すべてのバッファを閉じます


23

バッファリストには10​​個以上のdiredウィンドウがありbuffer-menu、それらすべてを手動でマークして強制終了することがあります。開いているすべてのdiredウィンドウをすばやく閉じる方法はありますか?


私は質問に最も直接答える答えを受け入れました。しかし、私は代わりにオンス防止の適用を開始しました:emacs.stackexchange.com/a/1041/93
nispio

回答:


32

次のことができます。

M-x ibuffer

* / diredモードでバッファをマークします。

D それらを削除します。


1
以前ibufferについて聞いたことがありません。私は間違いなくにマッピングさC-x C-bibufferます。
nispio 14

tdired-toggle-marks)を押してすべてをマークすることもできます(以前にマークされていなかった場合)。
カイサ14

@caisah dired-toggle-marksdiredコマンドの名前です。を押すtとibuffer内のすべてのマークも切り替わりますが、通常、非ディレクトリバッファはdiredバッファよりも多いため、このコンテキストではトグルはあまり意味がありません。
nispio 14年

@nispioそのとおりです。私はなぜ知らないが、私はすべてのバッファをして考えていた変数dired ...
caisah

1
注:Dはdiredバッファーには適用されず、リストの最初のバッファーに適用されるため、diredバッファーがない場合、これは正しく機能しません。
ダニエルクルマン

10

すべてのdiredバッファーを強制終了する別の関数を追加する代わりに、のフィルターグループを利用してibuffer、さまざまな条件でバッファーをグループ化することをお勧めします。

フィルターグループを設定する例を次に示します。

(setq-default ibuffer-saved-filter-groups
              `(("Default"
                 ;; I create a group call Dired, which contains all buffer in dired-mode
                 ("Dired" (mode . dired-mode))
                 ("Temporary" (name . "\*.*\*"))
                 )))

次に、ウィンドウをC-x C-b開くとibuffer、次のようなものが表示されます。

例1

カーソルを[ Dired ]M-pM-n)に移動し、を押しdて削除としてマークします

例2

を押しxて実行します。

キーを新しい関数にバインドする方法を考える必要がなく、バッファーがより適切に構成されているため、この方法が好きです。


ibufferコードを評価した後、最初に起動したときにフィルターグループが表示されませんでした。グループを取得するにはヒット/ R(にバインドibuffer-switch-to-saved-filter-groups)する必要がありました。
itsjeyd 14年

(ibuffer-switch-to-saved-filter-groups "Default")そうでない場合は、フィルタグループ名を変更する必要があり、ibufferフックにコード行を追加することができますDefault
ランギ林

1
はい、それは私がやったことです。回答を読む前にフィルターグループについて知らなかった、それらに言及してくれてありがとう;)
itsjeyd 14年

10

あなたがするので、あなたは、多くのdiredバッファを持っていたかった全て一点でそれらを?IOW、それぞれを別々のバッファとして作成したいですか?

そうでない場合、解決策は簡単です。ディレクトリ名にヒットしてDiredで開くときに、既存のDiredバッファを再利用するようDiredに指示RETします。

その方法は次のとおりです。

  1. ライブラリDired +のロード(dired+.el):

    (require 'dired+)
    
  2. Diredに、Diredバッファーを再利用するように指示します。

    (diredp-toggle-find-file-reuse-dir 1)
    

その効果はRET、Diredのディレクトリを押す(またはマウスをクリックする)ときにfind-alternate-file使用されるため、元のDiredバッファーが新しいバッファーに置き換えられる(削除される)ことです。

この動作は、DiredでC-M-R(別名C-M-S-r)を使用していつでも切り替えることができます。


これが私が今解決した解決策です。そもそも20個のオープンDiredバッファーが欲しくなかった。それを提案(および作成)していただきありがとうございます
nispio 14年

リンクが
無効

1
@Zelphir:ヘッズアップをありがとう。今は大丈夫です。(Emacs Wikiは一般にURLを変更したため、このような古い投稿はリンク切れになりました。)
ドリュー

8

このようなもの(少しスクロール)?

(defun kill-dired-buffers ()
     (interactive)
     (mapc (lambda (buffer) 
           (when (eq 'dired-mode (buffer-local-value 'major-mode buffer)) 
             (kill-buffer buffer))) 
         (buffer-list)))

5

以下も使用できますhelm-mini

  • を実行しますM-x helm-mini
  • プロンプトに入力します:(の*Di部分的な単語Dired、これ以上入力する必要はありません)。入力すると、バッファーは徐々に狭くなります。これで、Diredバッファのみが残ります。を押しM-aてすべてをマークします。
  • を押しTABてアクションメニューに切り替え、を押しKてアクションを選択しますKill buffer(s)
  • を押しRETてアクションを実行します。

良い点helm-miniは、通常のEmacsを置き換えることができることC-x bです。そのため、バッファの切り替え用と実際のバッファマネージャ用の2つのキーバインディングを使用する必要はありません。helm-miniオールインワンです。詳細については、私のhelm-miniガイドをご覧ください

helm-miniまた、ファジーマッチバッファーを使用しC-SPCたり、またはM-aM ark a llの略)でマークすることで複数のバッファーを開くことができます。@パターンの前に追加することにより、特定の文字列を含むバッファに絞り込むこともでき@testます。たとえば、文字列「test」を含むバッファのみを選択することを意味します。


1

私はこのようなことを試してみます:

(require 'dash)

(defun my-kill-dired-buffers ()
  (interactive)
  (kill-some-buffers
   (-filter (lambda (buffer)
              (save-excursion
                (set-buffer buffer)
                (eq major-mode 'dired-mode)))
            (buffer-list))))

1
MELPAからの-filter要求だとdash.el思います。おそらくそれを要件としてリストする必要があります。
Vamsi 14

1

実際に探しているのは、不要なバッファを自動的にクリーンアップする方法です。その場合midnight.elは、Emacsの一部であるチェックアウトする必要があります。

しかし、一般的に言えば、ibufferFranciscoが提案したように、バッファーの一括操作が非常に簡単になります。


1

Iciclesを使用する場合、C-x kすべてのDiredバッファー、または任意のモードのすべてのバッファーを強制終了できます。

を押した後、特定のモードのバッファのみを保持するためC-x kに使用C-x M +します。ヒットTABしてモードを確認し、を選択しますdired-mode。そして、使用C-!殺すために、すべてのそのモードでのバッファを。

C-x k C-x M + dired-mode C-!
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.