모든 dired 버퍼를 닫습니다


23

때로는 내 버퍼 목록에 10 개 이상의 창이 사라져서 buffer-menu수동으로 표시하고 모두 죽이는 경우가 있습니다. 열려있는 모든 닫힌 창을 빠르게 닫을 수있는 방법이 있습니까?


질문에 가장 직접 답변하는 답변을 수락했습니다. 그러나 나는 그 대신에 예방 온스를 적용하기 시작했습니다. emacs.stackexchange.com/a/1041/93
nispio

답변:


32

다음을 수행 할 수 있습니다.

M-x ibuffer

* / 버퍼를 다이어 드 모드로 표시합니다.

D 그들을 삭제합니다.


1
나는 이전에 ibuffer에 대해 들어 본 적이 없습니다. 나는 확실히 매핑됩니다 C-x C-bibuffer.
nispio

t( dired-toggle-marks)을 눌러 모두 표시 할 수도 있습니다 ( 이전에 표시되지 않은 경우).
caisah

@caisah dired-toggle-marksdired 명령 의 이름입니다 . 를 누르면 t이버 퍼의 모든 마크가 토글되지만, 건조되지 않은 버퍼는 일반적으로 다 이어링 된 버퍼의 수보다 많으므로이 컨텍스트에서는 토글이 의미가없는 경우가 많습니다.
nispio

@nispio 당신이 맞아요. 왜 그런지 모르겠지만, 나는 모든 버퍼가되었다 생각 dired ...
caisah

1
참고 : dired 버퍼가없는 경우에는 D가 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-p, M-n), 다음을 눌러 d삭제 등의 마크

예 2

를 눌러 x실행합니다.

키를 새로운 기능에 바인딩하는 방법을 생각할 필요가없고 버퍼가 더 잘 구성되어 있기 때문에이 방법을 선호합니다.


ibuffer코드를 평가 한 후 처음 시작할 때 필터 그룹이 표시되지 않았습니다 . 나는 명중했다 / R(결합 ibuffer-switch-to-saved-filter-groups그룹을 얻기 위해).
itsjeyd

(ibuffer-switch-to-saved-filter-groups "Default")이 코드 줄을 ibuffer 후크에 추가 할 수 있습니다. 필터 그룹 이름이 아닌 경우 변경해야합니다.Default
Rangi Lin

1
그렇습니다. 답변을 읽기 전에 필터 그룹에 대해 몰랐습니다. 언급 해 주셔서 감사합니다.)
itsjeyd

10

한 번에 모두 원했기 때문에 Dired 버퍼가 많이 있습니까? IOW, 각각을 별도의 버퍼로 만들고 습니까?

그렇지 않은 경우 해결책은 간단합니다. Dired에서RET 디렉토리 이름을 열 때 기존 Dired 버퍼를 재사용하도록 Dired에 지시하십시오 .

이를 수행하는 방법은 다음과 같습니다.

  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(aka C-M-S-r)를 사용하여 언제든지이 동작을 토글 할 수 있습니다 .


이것이 제가 지금 해결 한 솔루션입니다. 처음에는 20 개의 오픈 Dired 버퍼를 원하지 않았습니다. 제안하고 작성해 주셔서 감사합니다.
nispio

링크는 죽어 404를 얻습니다 : (
Zelphir Kaltstahl

1
@Zelphir : 고마워요. 지금은 괜찮을 것입니다. (Emacs Wiki는 일반적으로 URL을 변경 했으므로 이와 같은 오래된 게시물은 링크가 끊어졌습니다.)
Drew

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있기 때문에 두 가지 키 바인딩을 사용할 필요가 없습니다. 하나는 버퍼 전환을 위해 하나는 실제 버퍼 관리자를 위해 하나입니다. helm-mini올인원입니다. 조타 미니 가이드 에서 자세히 읽어보십시오 .

helm-mini또한 퍼지 일치 버퍼를 할 수와 함께 표시하여 열려있는 여러 버퍼 수 C-SPC또는 M-a(스탠드 M 방주 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

1

실제로 찾고있는 것은 원하지 않는 버퍼를 자동으로 정리하는 방법이며,이 경우 midnight.elEmacs의 일부인 체크 아웃해야합니다 .

그러나 일반적으로 말하자면, ibufferFrancisco가 제안한 것처럼 버퍼에서 대량으로 작업하기가 매우 쉽습니다.


1

당신이 사용하는 경우 차가워을 , 당신은 사용할 수있는 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.