Emacs에서 현재 버퍼를 제외한 모든 것을 어떻게 닫습니까? 최신 웹 브라우저의 "다른 탭 닫기"기능과 유사합니까?
Emacs에서 현재 버퍼를 제외한 모든 것을 어떻게 닫습니까? 최신 웹 브라우저의 "다른 탭 닫기"기능과 유사합니까?
답변:
보다 수동적 인 방법을 사용하려면를 사용하여 모든 버퍼를 C-x C-b나열 d하고를 사용 하여 목록에서 버퍼를 삭제하도록 표시 한 다음를 사용 x하여 제거 할 수 있습니다.
또한 목록 버퍼를 고급 ibuffer : (global-set-key (kbd "C-x C-b") 'ibuffer)
. 위의 내용은 ibuffer에서 작동하지만 다음과 같이 할 수도 있습니다.
m(유지하려는 버퍼
t표시)
D( 표시 전환) (표시된 모든 버퍼 종료)
또한 Emacs Wiki의이 스 니펫을 사용하여이 수동 접근 방식을 더욱 간소화합니다.
;; 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
? C-h m
다른 모드와 마찬가지로 키 바인딩을 배우는 데 사용 합니다.
에서 EmacsWiki : 버퍼를 죽이는 :
(defun kill-other-buffers ()
"Kill all other buffers."
(interactive)
(mapc 'kill-buffer
(delq (current-buffer)
(remove-if-not 'buffer-file-name (buffer-list)))))
편집 : Gilles의 피드백으로 업데이트
buffer-file-name
호출하면 remove-if-not
dired 버퍼 (스크래치 버퍼, 용어 버퍼, 도움말 버퍼 등, 파일을 방문하지 않는 모든 항목)가 보존됩니다. 파일 버퍼와 dired 버퍼를 모두 닫는 쉬운 테스트는 생각할 수 없습니다. 기본적으로 dired 버퍼에 대해 다른 테스트를 사용하여 mapc을 완전히 두 번째 호출해야합니다.
(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
와 함께 remove-if-not
작동하지만이 죽이지 않는 *helm..
버퍼
emacs에서 직접이 작업을 수행하는 방법은 없습니다.
이를 수행하는 함수를 작성할 수 있습니다. 다음은 모든 버퍼를 닫습니다.
(폐쇄 모든 버퍼 () (인터렉티브) (mapc 'kill-buffer (버퍼 목록)))
(delete (current-buffer) (buffer-list))
매핑 할 수있는 버퍼 목록을 제공 kill-buffer
하고 현재 버퍼를 죽이지 않도록해야합니다.
(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)))))
예상대로 작동합니다.
@Starkey의 답변을 읽은 후 이것이 더 나을 것이라고 생각합니다.
(defun only-current-buffer ()
(interactive)
(mapc 'kill-buffer (cdr (buffer-list (current-buffer)))))
(buffer-list (current-buffer))는 모든 기존 버퍼를 포함하는 목록을 반환하며 현재 버퍼는 목록의 맨 앞에 있습니다.
이것은 StackOverflow에 대한 첫 번째 답변입니다. 도움이되기를 바랍니다 :)
buffer-list
수년에 걸쳐 사양이 변경 되었는지는 모르겠지만 (buffer-list (current-buffer))
위의 답변에서 알 수 있듯이 작동 하지 않을 것입니다. 수행 C-h f buffer-list RET
현재 사양에 대해.
이 솔루션이 가장 간단한 솔루션이라는 것을 알았습니다. 현재 버퍼를 제외한 모든 버퍼를 삭제합니다. 이 코드를 .emacs
파일 에 추가해야 합니다.
(defun kill-other-buffers ()
"Kill all other buffers."
(interactive)
(mapc 'kill-buffer (delq (current-buffer) (buffer-list))))
물론 함께 사용 M-x kill-other-buffers
RET 하거나.emacs
파일에 다음 코드를 붙여 넣은 다음C-xC-b
(global-set-key (kbd "C-x C-b") 'kill-other-buffers)
나는 몇 달 동안 crux-kill-other-buffers 를 사용했습니다.
그러나 dired 버퍼도 삭제되기를 원합니다. @Euge와 @ wenjun.yan의 답변이이 문제를 해결합니다. 그러나 특수 버퍼 (예 : * git-credential-cache--daemon *, * scratch *, helm 작업 등)를 삭제합니다. 그래서 저는이 (현재) 해결책을 생각해 냈습니다.
(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)))))
kill-matching-buffers 에서 영감을 얻었습니다 . condition
원하는 경우 제외 할 다른 버퍼 이름에 추가 할 수 있습니다 .
도움이되기를 바랍니다 :)
당신은 이것도 좋아할 수 있습니다-현재 버퍼를 제외한 모든 버퍼를 죽이고 * Messages *와 * scratch * (이것이 편리합니다. "툴킷"이라고 부릅니다), 중복 된 창도 닫고, 현재 어느 하나의 창에 살고 있습니다. 완충기.
(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))
과 동일하지만 (eq x (current-buffer))
효율성이 떨어집니다. 나머지 or
로 단순화 될 수있다(member (buffer-name x) '("*Messages*" "*scratch*"))
이것이 당신이 원하는 것입니다.
C-x 1
출처 : https://blasphemousbits.wordpress.com/2007/05/04/learning-emacs-part-4-buffers-windows-and-frames/
ibuffer
있습니까? @phils