2010-08-05 16 views

Respuesta

45

Desde EmacsWiki: Killing Buffers:

(defun kill-other-buffers() 
    "Kill all other buffers." 
    (interactive) 
    (mapc 'kill-buffer 
      (delq (current-buffer) 
       (remove-if-not 'buffer-file-name (buffer-list))))) 

Edición: actualizado con los comentarios de Gilles

+3

¿Por qué no se mata al buffer directo? Me gusta eliminar que también – swdev

+0

dired buffers no establecen 'buffer-file-name' y por lo tanto la llamada a' remove-if-not' en el ejemplo anterior conservará los búferes dired (así como también el búfer de scratch, búferes de términos, ayudar a los almacenamientos intermedios, etc., a cualquier cosa que no visite un archivo). No puedo pensar en una prueba fácil que cerraría tanto los búferes de archivos como los búferes de dired, básicamente necesitaría una segunda invocación completa de mapc con una prueba diferente para buffers dired. – robru

+0

una simple modificación de matar tampones también dired '(defun Kill-otras-buffers() "Matar a todos los otros tampones." (interactiva) (MAPC 'kill-buffer de (delq (current-buffer) (remove- if-not '(lambda (x) (o (buffer-file-name x) (eq' dired-mode (buffer-local-value 'principal-modo x)))) (buffer-list))))) ' – frinkr

17

No hay una manera directa en emacs para hacer esto.

Puede escribir una función para hacer esto. A continuación se cerrarán todas las memorias intermedias:

 
(defun close-all-buffers() 
    (interactive) 
    (mapc 'kill-buffer (buffer-list))) 
+2

Ah, pero esto cerrará * todos * los amortiguadores. –

+6

Pero eso es lo que * I * quiero ... – Droogans

76

Para un enfoque más manual, puede listar todos los tampones con Cx Cb, marque los almacenamientos intermedios en la lista para su eliminación con d, y luego use x para eliminarlos.

También recomiendo reemplazar list-buffers con el ibuffer más avanzado: (global-set-key (kbd "C-x C-b") 'ibuffer). Lo anterior funcionará con ibuffer, pero también se puede hacer esto:

m (marcar el buffer que desea mantener)
t (marcas de palanca)
D (matar a todos los tampones marcados)

también utilizo este fragmento de la Wiki Emacs, lo que racionalizar aún más este enfoque 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) 
+0

¡gracias! es muy útil – Cynede

7
(defun only-current-buffer() 
    (interactive) 
    (let ((tobe-killed (cdr (buffer-list (current-buffer))))) 
    (while tobe-killed 
     (kill-buffer (car tobe-killed)) 
     (setq tobe-killed (cdr tobe-killed))))) 

Funciona como esperaba.

Y después de leer @ respuesta de Starkey, creo que esto será mejor:

(defun only-current-buffer() 
    (interactive)                 
    (mapc 'kill-buffer (cdr (buffer-list (current-buffer))))) 

(buffer-list (current-buffer)) devolverá una lista que contiene todas las memorias intermedias existentes, con el búfer a la cabeza de la lista.

Esta es mi primera respuesta en StackOverflow. Esperamos que ayude :)

+0

Y esto mis amigos es cómo surgen las soluciones elegantes de personas que comparten sus ideas –

10

hay una construida en el mando m - xkill-some-buffers (estoy usando 24/03/50) En mi GUI nextstep (no tratado en un terminal, pero seguro que es similar) a continuación, puede aprueba qué amortiguadores matar.

+2

Esto es especialmente útil cuando tienes más de 1000 búferes cargados. – ocodo

3

Encontré esta solución para ser la más simple. Esto elimina todos los búferes excepto el actual.Usted tiene que añadir este código a su archivo .emacs

(defun kill-other-buffers() 
     "Kill all other buffers." 
     (interactive) 
     (mapc 'kill-buffer (delq (current-buffer) (buffer-list)))) 

Por supuesto, a continuación, utilizarlo con Mxkill-other-buffersRETo pegar el siguiente código en el archivo .emacs demasiado y luego sólo tiene que pulsar Cx Cb

(global-set-key (kbd "C-x C-b") 'kill-other-buffers) 
Cuestiones relacionadas