Comment fermer tout sauf le tampon actuel dans Emacs? Similaire à la fonctionnalité "Fermer les autres onglets" dans les navigateurs Web modernes?
Comment fermer tout sauf le tampon actuel dans Emacs? Similaire à la fonctionnalité "Fermer les autres onglets" dans les navigateurs Web modernes?
Réponses:
Pour une approche plus manuelle, vous pouvez répertorier tous les tampons avec C-x C-b, marquer les tampons dans la liste pour suppression avec d, puis les utiliser xpour les supprimer.
Je vous recommande également le remplacement de la liste-tampons avec le ibuffer plus avancé: (global-set-key (kbd "C-x C-b") 'ibuffer)
. Ce qui précède fonctionnera avec ibuffer, mais vous pouvez également le faire:
m(marquez le tampon que vous souhaitez conserver)
t(bascule)
D(tuez tous les tampons marqués)
J'utilise également cet extrait du Wiki Emacs, qui rationaliserait davantage cette approche manuelle:
;; 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)
q
- être ? Utilisez C-h m
pour apprendre les associations de touches, comme avec n'importe quel autre mode.
Depuis 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)))))
Edit : mis à jour avec les retours de Gilles
buffer-file-name
et donc l'appel à remove-if-not
dans l'exemple ci-dessus conservera les tampons dired (ainsi que le tampon de travail, les tampons de termes, les tampons d'aide, etc., tout ce qui ne visite pas un fichier). Je ne peux pas penser à un test facile qui fermerait les tampons de fichiers et les tampons dired, vous auriez besoin en gros d'une seconde invocation entière de mapc avec un test différent pour les tampons 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
par des remove-if-not
œuvres mais cela ne tue pas les *helm..
tampons
Il n'y a pas de moyen directement dans emacs de faire cela.
Vous pouvez écrire une fonction pour ce faire. Ce qui suit fermera tous les tampons:
(défun fermer tous les tampons () (interactif) (mapc 'kill-buffer (buffer-list)))
Il y a une commande intégrée m- x kill-some-buffers
(j'utilise 24.3.50) Dans mon interface graphique nextstep (pas essayé dans un terminal mais bien sûr que c'est similaire), vous pouvez ensuite approuver les tampons à tuer.
(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)))))
Cela fonctionne comme prévu.
Et après avoir lu la réponse de @ Starkey, je pense que ce sera mieux:
(defun only-current-buffer ()
(interactive)
(mapc 'kill-buffer (cdr (buffer-list (current-buffer)))))
(buffer-list (current-buffer)) renverra une liste contenant tous les tampons existants, avec le tampon actuel en tête de la liste.
C'est ma première réponse sur StackOverflow. J'espère que ça aide :)
J'ai trouvé que cette solution était la plus simple. Cela supprime tous les tampons sauf celui actuel. Vous devez ajouter ce code à votre .emacs
fichier
(defun kill-other-buffers ()
"Kill all other buffers."
(interactive)
(mapc 'kill-buffer (delq (current-buffer) (buffer-list))))
Bien sûr, vous l'utilisez avec M-x kill-other-buffers
RET ou vous collez également le code suivant dans le .emacs
fichier, puis appuyez simplement surC-xC-b
(global-set-key (kbd "C-x C-b") 'kill-other-buffers)
J'utilise crux-kill-other-buffers depuis quelques mois.
Mais je veux aussi que les tampons dired soient supprimés. Les réponses de @ Euge et @ wenjun.yan résolvent ce problème. Mais cela supprimera les tampons spéciaux (par exemple * git-credential-cache - daemon *, * scratch *, opération de barre, etc.). J'ai donc proposé cette solution (actuelle).
(defun aza-kill-other-buffers ()
"Kill all buffers but current buffer and special buffers"
(interactive)
(dolist (buffer (delq (current-buffer) (buffer-list)))
(let ((name (buffer-name buffer)))
(when (and name (not (string-equal name ""))
(/= (aref name 0) ?\s)
(string-match "^[^\*]" name))
(funcall 'kill-buffer buffer)))))
Inspiré des tampons de mise à mort . Vous pouvez en ajouter d'autres condition
sur un autre nom de tampon à exclure, si vous le souhaitez.
J'espère que ça aide :)
Vous pouvez également aimer celui-ci - tuer tous les tampons sauf celui actuel, * Messages * et * scratch * (qui sont pratiques à avoir, je les appelle "boîte à outils"), fermez également les fenêtres redondantes, en vous vivant quelle fenêtre actuelle tampon.
(defun my/kill-all-buffers-except-toolbox ()
"Kill all buffers except current one and toolkit (*Messages*, *scratch*). Close other windows."
(interactive)
(mapc 'kill-buffer (remove-if
(lambda (x)
(or
(string-equal (buffer-name) (buffer-name x))
(string-equal "*Messages*" (buffer-name x))
(string-equal "*scratch*" (buffer-name x))))
(buffer-list)))
(delete-other-windows))
(string-equal (buffer-name) (buffer-name x))
est le même que (eq x (current-buffer))
, juste moins efficace. Le reste or
peut être simplifié à(member (buffer-name x) '("*Messages*" "*scratch*"))
Voici ce que tu veux:
C-x 1
source: https://blasphemousbits.wordpress.com/2007/05/04/learning-emacs-part-4-buffers-windows-and-frames/
ibuffer
? @phils