मैं 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
कीबाइंडिंग सीखने के लिए उपयोग करें , किसी अन्य मोड की तरह।
(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
उपरोक्त उदाहरण में कॉल, डेयर किए गए बफ़र्स (साथ ही स्क्रैच बफर, टर्म बफ़र्स, बफ़र्स की मदद करने, आदि, किसी भी चीज़ को फ़ाइल में नहीं आने) को संरक्षित करेगा। मैं एक आसान परीक्षण के बारे में नहीं सोच सकता जो दोनों फ़ाइल बफ़र्स और दिनांकित बफ़र्स को बंद कर देगा, आपको मूल रूप से मृगत बफ़र्स के लिए एक अलग परीक्षण के साथ मैपक के पूरे दूसरे आह्वान की आवश्यकता होगी।
(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 में कोई रास्ता नहीं है।
आप ऐसा करने के लिए एक फ़ंक्शन लिख सकते हैं। निम्नलिखित सभी बफ़र्स को बंद कर देगा:
(करीब-सभी बफर्स) (सहभागी) (मेप्स 'किल-बफर (बफर-सूची)))
एक अंतर्निहित कमांड है m- x kill-some-buffers
(मैं 24.3.50 का उपयोग कर रहा हूं) मेरे अगले स्टेप गुई में (एक टर्मिनल में कोशिश नहीं की गई, लेकिन यकीन है कि यह समान है) फिर आप किस शौकीन को मारने के लिए मंजूरी दे सकते हैं।
(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)))))
यह आपकी अपेक्षा के अनुरूप काम करता है।
और @ स्टार्क के जवाब को पढ़ने के बाद, मुझे लगता है कि यह बेहतर होगा:
(defun only-current-buffer ()
(interactive)
(mapc 'kill-buffer (cdr (buffer-list (current-buffer)))))
(बफ़र-सूची (वर्तमान-बफ़र)) एक सूची लौटाएगा जिसमें सभी मौजूदा बफ़र्स शामिल हैं, सूची के प्रमुख पर वर्तमान बफ़र के साथ।
StackOverflow पर यह मेरा पहला उत्तर है। आशा करता हूँ की ये काम करेगा :)
मुझे यह समाधान सबसे सरल लगा। यह करंट को छोड़कर हर बफर को डिलीट कर देता है। आपको इस कोड को अपनी .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)
मैंने कुछ महीनों के लिए क्रूक्स-किल-अदर-बफ़र्स का उपयोग किया है ।
लेकिन मैं चाहता हूं कि डेयरिंग बफ़र्स भी डिलीट हो जाएं। @ Euge's और @ wenjun.yan के उत्तर इसे हल करते हैं। लेकिन यह विशेष बफ़र्स (जैसे * गिट-क्रेडेंशियल-कैश - डेमॉन *, * स्क्रैच *, हेल्म ऑपरेशन, और आदि) को हटा देगा। इसलिए मैं इस (वर्तमान) समाधान के साथ आया।
(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)))))
किल-मैचिंग-बफ़र्स से प्रेरित । condition
यदि आप चाहते हैं तो आप बाहर निकालने के लिए अन्य बफर-नाम पर जोड़ सकते हैं ।
आशा करता हूँ की ये काम करेगा :)
आप इसे भी पसंद कर सकते हैं - करंट बफ़र को छोड़कर सभी बफ़र्स को मार सकते हैं, * मैसेज * और * स्क्रैच * (जो कि करना आसान है, मैं उन्हें "टूलकिट" कहता हूं), साथ ही बेमानी खिड़कियों को बंद कर देता हूं, आपको जीवित करता हूं जो एक खिड़की बफ़र।
(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