Como faço para fechar tudo, exceto o buffer atual no Emacs? Semelhante ao recurso "Fechar outras guias" nos navegadores modernos?
91
Para uma abordagem mais manual, você pode listar todos os buffers com C-x C-b, marcar os buffers na lista para exclusão com de usar xpara removê-los.
Eu também recomendo substituindo list-buffers com o ibuffer mais avançado: (global-set-key (kbd "C-x C-b") 'ibuffer)
. O procedimento acima funcionará com o ibuffer, mas você também pode fazer isso:
m(marque o buffer que deseja manter)
t(marcas de alternância)
D(elimine todos os buffers marcados)
Eu também uso este trecho do Emacs Wiki, o que simplificaria ainda mais essa abordagem manual:
;; Ensure ibuffer opens with point at the current buffer's entry.
(defadvice ibuffer
(around ibuffer-point-to-most-recent) ()
"Open ibuffer with cursor pointed to most recent buffer name."
(let ((recent-buffer-name (buffer-name)))
ad-do-it
(ibuffer-jump-to-buffer recent-buffer-name)))
(ad-activate 'ibuffer)
ibuffer
? @philsq
? UseC-h m
para aprender atalhos de teclado, assim como em qualquer outro modo.De EmacsWiki: Killing Buffers :
Editar : atualizado com feedback de Gilles
fonte
buffer-file-name
e, portanto, a chamada pararemove-if-not
no exemplo acima preservará buffers dired (bem como buffer de rascunho, buffers de termo, buffers de ajuda, etc, qualquer coisa que não visite um arquivo). Não consigo pensar em um teste fácil que feche os buffers de arquivo e os buffers dired, você precisa basicamente de uma segunda chamada inteira de mapc com um teste diferente para os buffers dired.(defun kill-other-buffers () "Kill all other buffers." (interactive) (mapc 'kill-buffer (delq (current-buffer) (remove-if-not '(lambda (x) (or (buffer-file-name x) (eq 'dired-mode (buffer-local-value 'major-mode x)))) (buffer-list)))))
cl-remove-if-not
porremove-if-not
funciona, mas não mata os*helm..
buffersNão existe uma maneira direta de fazer isso no emacs.
Você pode escrever uma função para fazer isso. O seguinte fechará todos os buffers:
fonte
Há um comando embutido m- x
kill-some-buffers
(estou usando 24.3.50) Na minha gui nextstep (não tentei em um terminal, mas com certeza é semelhante), você pode aprovar quais buffers devem ser eliminados.fonte
Funciona como você esperava.
E depois de ler a resposta de @ Starkey, acho que ficará melhor:
(buffer-list (current-buffer)) retornará uma lista que contém todos os buffers existentes, com o buffer atual no topo da lista.
Esta é minha primeira resposta no StackOverflow. Espero que ajude :)
fonte
Achei essa solução a mais simples. Isso exclui todos os buffers, exceto o atual. Você tem que adicionar este código ao seu
.emacs
arquivoClaro, então você o usa com M-x
kill-other-buffers
RET ou cola o seguinte código no.emacs
arquivo também e, em seguida, apenas pressioneC-xC-bfonte
Eu uso crux-kill-other-buffers por alguns meses.
Mas eu quero que os buffers dired sejam excluídos também. As respostas de @Euge e @wenjun.yan resolvem isso. Mas ele excluirá buffers especiais (por exemplo, * git-credential-cache - daemon *, * scratch *, operação do helm e etc). Então eu vim com esta solução (atual).
Inspirado em buffers de correspondência de morte . Você pode adicionar mais
condition
em outro nome-do-buffer para excluir, se quiser.Espero que ajude :)
fonte
Você também pode gostar deste - matar todos os buffers, exceto o atual, * Mensagens * e * arranhar * (que são úteis de se ter, eu os chamo de "kit de ferramentas"), feche janelas redundantes também, deixando você qual janela atual amortecedor.
fonte
(string-equal (buffer-name) (buffer-name x))
é o mesmo que(eq x (current-buffer))
, apenas menos eficiente. O restanteor
pode ser simplificado para(member (buffer-name x) '("*Messages*" "*scratch*"))
Isso é o que você quer:
fonte: https://blasphemousbits.wordpress.com/2007/05/04/learning-emacs-part-4-buffers-windows-and-frames/
fonte