Às vezes, minha lista de buffers tem mais de 10 janelas direcionadas e eu acabo usando buffer-menu
para marcar e matar manualmente todas elas. Existe uma maneira mais rápida de fechar todas as janelas dired abertas?
Às vezes, minha lista de buffers tem mais de 10 janelas direcionadas e eu acabo usando buffer-menu
para marcar e matar manualmente todas elas. Existe uma maneira mais rápida de fechar todas as janelas dired abertas?
Respostas:
Você pode fazer o seguinte:
M-x
ibuffer
* /
para marcar buffers no modo direcionado.
D
para excluí-los.
C-x C-b
para ibuffer
.
t
( dired-toggle-marks
) para marcar todos (se nenhum foi marcado anteriormente).
dired-toggle-marks
é o nome do comando dired . Pressionar t
também alternará todas as marcas no ibuffer, mas os buffers não direcionados geralmente superam os buffers direcionados, portanto, alternar geralmente não faz sentido nesse contexto.
Em vez de adicionar outra função para eliminar todos os dired
buffers, sugiro que você aproveite os grupos de filtros ibuffer
, pois permite agrupar o buffer por várias condições.
Aqui está um exemplo para definir grupos de filtros:
(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 . "\*.*\*"))
)))
Em seguida, C-x C-b
abra a ibuffer
janela, você pode ver algo como isto:
Mova o cursor para [ Dired ]
(com M-p
, M-n
) e pressione d
para marcar como excluir
depois pressione x
para executar.
Prefiro assim, porque não preciso pensar em como vincular minha chave à nova função, e meus buffers estão melhor organizados.
ibuffer
após avaliar seu código. Eu tive que bater / R
(obrigado ibuffer-switch-to-saved-filter-groups
) para obter os grupos.
(ibuffer-switch-to-saved-filter-groups "Default")
Você pode adicionar esta linha de código em ibuffer gancho, nome grupos de filtro deve ser mudado se não éDefault
Você tem muitos buffers Dired porque queria todos eles em um ponto? IOW, você queria criar cada um deles como buffers separados?
Caso contrário, a solução é simples: diga ao Dired para reutilizar um buffer Dired existente quando você pressionar RET
um nome de diretório para abri-lo no Dired.
Aqui está como fazer isso:
Carregar biblioteca Dired + ( dired+.el
):
(require 'dired+)
Diga ao Dired para reutilizar os buffers Dired:
(diredp-toggle-find-file-reuse-dir 1)
O efeito é que, quando você pressiona RET
(ou clica com o mouse) em um diretório no Dired, find-alternate-file
é usado, portanto, o buffer Dired original é substituído (excluído) pelo novo.
Você pode alternar esse comportamento a qualquer momento, usando C-M-R
(aka C-M-S-r
) em Dired.
Algo assim (role um pouco)?
(defun kill-dired-buffers ()
(interactive)
(mapc (lambda (buffer)
(when (eq 'dired-mode (buffer-local-value 'major-mode buffer))
(kill-buffer buffer)))
(buffer-list)))
Você também pode usar helm-mini
:
M-x helm-mini
.*Di
(palavra parcial para Dired
, não é necessário inserir mais). Conforme você digita, os buffers são reduzidos gradualmente. Agora, resta apenas o Dired
buffer. Pressione M-a
para marcar tudo.TAB
para alternar para o menu de ação e pressione K
para selecionar a ação Kill buffer(s)
.RET
para executar a ação.A coisa boa helm-mini
é que ele pode substituir o Emacs normal C-x b
, para que você não precise usar duas ligações de teclas, uma para alternar o buffer e outra para um gerenciador de buffer real. helm-mini
é tudo em um. Leia mais no meu mini-guia de leme .
helm-mini
também pode conter buffer de correspondência difusa e permitir a abertura de vários buffers marcando com C-SPC
ou M-a
(defina M ark a ll). Você também pode restringir para que o buffer contenha determinada sequência de caracteres anexando @
antes de um padrão, por exemplo, @test
significa selecionar apenas buffers que contenham a sequência "test".
Eu tentaria algo assim:
(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))))
-filter
exige dash.el
do MELPA. Você provavelmente deve listar isso como um requisito.
Se você usar Sincelos , poderá C-x k
matar todos os buffers Dired - ou todos os buffers em qualquer modo.
Após bater C-x k
, use C-x M +
para manter apenas os buffers com um determinado modo. Clique TAB
para ver os modos e escolha dired-mode
. Em seguida, use C-!
para matar todos os buffers com esse modo.
C-x k C-x M + dired-mode C-!