¿Cómo cierro todos menos el búfer actual en Emacs? ¿Similar a la función "Cerrar otras pestañas" en los navegadores web modernos?
91
Para un enfoque más manual, puede enumerar todos los búferes con C-x C-b, marcar los búferes en la lista para eliminarlos dy luego usarlos xpara eliminarlos.
También se recomienda la sustitución de list-buffers con el ibuffer más avanzada: (global-set-key (kbd "C-x C-b") 'ibuffer)
. Lo anterior funcionará con ibuffer, pero también puede hacer esto:
m(marque el búfer que desea mantener)
t(alternar marcas)
D(eliminar todos los búferes marcados)
También utilizo este fragmento de Emacs Wiki, que simplificaría 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)
ibuffer
? @philsq
¿ tal vez ? ÚseloC-h m
para aprender combinaciones de teclas, al igual que con cualquier otro modo.De EmacsWiki: Killing Buffers :
Editar : actualizado con comentarios de Gilles
fuente
buffer-file-name
y, por lo tanto, la llamada aremove-if-not
en el ejemplo anterior conservará los búferes dired (así como el búfer temporal, búfer temporal, búfer de ayuda, etc., cualquier cosa que no visite un archivo). No puedo pensar en una prueba fácil que cierre tanto los búferes de archivos como los búferes dired, básicamente necesitarías una segunda invocación completa de mapc con una prueba diferente para búferes 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
conremove-if-not
obras, pero esto no mata los*helm..
búferesNo hay una forma directamente en emacs de hacer esto.
Podría escribir una función para hacer esto. Lo siguiente cerrará todos los búferes:
fuente
Hay un comando integrado m: x
kill-some-buffers
(estoy usando 24.3.50) En mi siguiente interfaz gráfica de usuario (no probado en una terminal, pero seguro que es similar), puede aprobar qué búferes eliminar.fuente
Funciona como esperabas.
Y después de leer la respuesta de @ Starkey, creo que esto será mejor:
(buffer-list (current-buffer)) devolverá una lista que contiene todos los búferes existentes, con el búfer actual al principio de la lista.
Esta es mi primera respuesta en StackOverflow. Espero eso ayude :)
fuente
Encontré que esta solución es la más simple. Esto borra todos los búferes excepto el actual. Tienes que agregar este código a tu
.emacs
archivoPor supuesto, luego lo usa con M-x
kill-other-buffers
RET o pega el siguiente código en el.emacs
archivo también y luego simplemente presioneC-xC-bfuente
He usado crux-kill-other-buffers durante algunos meses.
Pero quiero que los búferes de dired también se eliminen. Las respuestas de @ Euge y @ wenjun.yan resuelven esto. Pero eliminará búferes especiales (por ejemplo, * git-credential-cache - daemon *, * scratch *, operación de helm, etc.). Entonces se me ocurrió esta solución (actual).
Inspirado en búferes de emparejamiento de muertes . Puede agregar más
condition
en otro nombre de búfer para excluir, si lo desea.Espero eso ayude :)
fuente
También le puede gustar este: elimine todos los búferes excepto el actual, * Messages * y * scratch * (que son útiles, los llamo "kit de herramientas"), cierre las ventanas redundantes también, y le mostrará cuál es la ventana actual buffer.
fuente
(string-equal (buffer-name) (buffer-name x))
es lo mismo que(eq x (current-buffer))
, pero menos eficiente. El restoor
se puede simplificar a(member (buffer-name x) '("*Messages*" "*scratch*"))
Esto es lo que quieres:
fuente: https://blasphemousbits.wordpress.com/2007/05/04/learning-emacs-part-4-buffers-windows-and-frames/
fuente