Às vezes, minha lista de buffers tem mais de 10 janelas direcionadas e eu acabo usando buffer-menupara marcar e matar manualmente todas elas. Existe uma maneira mais rápida de fechar todas as janelas dired abertas?
Aceitei a resposta que responde mais diretamente à pergunta. No entanto, tenho uma vez que começaram a aplicar uma onça de prevenção em vez disso: emacs.stackexchange.com/a/1041/93
Eu nunca tinha ouvido falar em ibuffer antes. Definitivamente vou mapear C-x C-bpara ibuffer.
Nispio
Você também pode pressionar t( dired-toggle-marks) para marcar todos (se nenhum foi marcado anteriormente).
caisah 25/09/14
@caisah dired-toggle-marksé o nome do comando dired . Pressionar ttambé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.
Nispio 7/10
@nispio Você está certo. Eu não sei porque, mas eu estava pensando todos os buffers foram dired ...
caisah
1
Nota: isso não funciona corretamente quando não há buffers direcionados, porque o D não se aplica aos buffers direcionados, mas ao primeiro buffer da lista.
Daniel kullmann # 20/16
10
Em vez de adicionar outra função para eliminar todos os diredbuffers, 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-babra a ibufferjanela, você pode ver algo como isto:
Mova o cursor para [ Dired ](com M-p, M-n) e pressione dpara marcar como excluir
depois pressione xpara executar.
Prefiro assim, porque não preciso pensar em como vincular minha chave à nova função, e meus buffers estão melhor organizados.
Os grupos de filtros não foram exibidos para mim quando iniciei ibufferapós avaliar seu código. Eu tive que bater / R(obrigado ibuffer-switch-to-saved-filter-groups) para obter os grupos.
itsjeyd
(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
Rangi Lin
1
Sim, foi o que acabei fazendo. Não sabia sobre grupos de filtro antes de ler a sua resposta, obrigado por mencioná-los;)
itsjeyd
10
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 RETum nome de diretório para abri-lo no Dired.
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.
Digite no prompt: *Di(palavra parcial para Dired, não é necessário inserir mais). Conforme você digita, os buffers são reduzidos gradualmente. Agora, resta apenas o Diredbuffer. Pressione M-apara marcar tudo.
Pressione TABpara alternar para o menu de ação e pressione Kpara selecionar a ação Kill buffer(s).
Pressione RETpara 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-minitambém pode conter buffer de correspondência difusa e permitir a abertura de vários buffers marcando com C-SPCou 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, @testsignifica selecionar apenas buffers que contenham a sequência "test".
Eu acredito que -filterexige dash.eldo MELPA. Você provavelmente deve listar isso como um requisito.
Vamsi 24/09
1
O que você pode realmente procurar é uma maneira de limpar buffers indesejados automaticamente; nesse caso, você deve fazer check-out midnight.el, que faz parte do Emacs.
Mas de um modo geral, ibufferé muito fácil operar em buffers a granel, como sugeriu Francisco.
Se você usar Sincelos , poderá C-x kmatar 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 TABpara ver os modos e escolha dired-mode. Em seguida, use C-!para matar todos os buffers com esse modo.
Respostas:
Você pode fazer o seguinte:
M-x
ibuffer
* /
para marcar buffers no modo direcionado.D
para excluí-los.fonte
C-x C-b
paraibuffer
.t
(dired-toggle-marks
) para marcar todos (se nenhum foi marcado anteriormente).dired-toggle-marks
é o nome do comando dired . Pressionart
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 filtrosibuffer
, pois permite agrupar o buffer por várias condições.Aqui está um exemplo para definir grupos de filtros:
Em seguida,
C-x C-b
abra aibuffer
janela, você pode ver algo como isto:Mova o cursor para
[ Dired ]
(comM-p
,M-n
) e pressioned
para marcar como excluirdepois 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.
fonte
ibuffer
após avaliar seu código. Eu tive que bater/ R
(obrigadoibuffer-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
):Diga ao Dired para reutilizar os buffers Dired:
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
(akaC-M-S-r
) em Dired.fonte
Algo assim (role um pouco)?
fonte
Você também pode usar
helm-mini
:M-x helm-mini
.*Di
(palavra parcial paraDired
, não é necessário inserir mais). Conforme você digita, os buffers são reduzidos gradualmente. Agora, resta apenas oDired
buffer. PressioneM-a
para marcar tudo.TAB
para alternar para o menu de ação e pressioneK
para selecionar a açãoKill buffer(s)
.RET
para executar a ação.A coisa boa
helm-mini
é que ele pode substituir o Emacs normalC-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 comC-SPC
ouM-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".fonte
Eu tentaria algo assim:
fonte
-filter
exigedash.el
do MELPA. Você provavelmente deve listar isso como um requisito.O que você pode realmente procurar é uma maneira de limpar buffers indesejados automaticamente; nesse caso, você deve fazer check-out
midnight.el
, que faz parte do Emacs.Mas de um modo geral,
ibuffer
é muito fácil operar em buffers a granel, como sugeriu Francisco.fonte
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
, useC-x M +
para manter apenas os buffers com um determinado modo. CliqueTAB
para ver os modos e escolhadired-mode
. Em seguida, useC-!
para matar todos os buffers com esse modo.fonte