Emacs: удобное переключение между буферами
Emacs такая штука, что обычно в нем открыто много разный файлов одновременно. А тем более разных буферов (буфер вовсе не обязательно должен быть связан с конкретным файлом), между которыми нужно переключаться. Можно конечно это делать с помощью графического меню, но.. его может и не быть, или оно может быть, но при этом не быть мышки, которой легко кликнуть нужный пункт (скажем Emacs запущен в чоорной консоли). А еще в этом меню будет много лишнего (специальные буферы Help, Messages,..) Короче, ну его нафиг! Поэтому удобнее будет так:
Функция 'rkill-buffers' (пере)оперделяет назойливое поведение kill-buffer, которая требует подтверждения закрытия любого буфера, кроме текущего:
Почему же так не сделано по умолчанию?- это Emacs, детка, тут каждый сам себе бог =)
Альтернативные варианты:
Ну и отдельного упоминания заслуживает функция переключения между двумя буферами: текущим и предыдущим, после переключения на предыдущий он становится текущим, т. е. циклическое переключение:
(defvar wf-buffers-group1 "\\*\\(?:Help\\|Messages\\|scratch\\|Occur\\)\\*") (global-set-key (kbd "C-b") (lambda() "List buffers" (interactive) (rkill-buffers wf-buffers-group1) (buffer-menu) (isearch-forward) ;; чтобы не жать Enter дважды (execute-kbd-macro (kbd "RET")) (rkill-buffers "\\*Buffer.List\\*") ))Переключение к списку всех нужных буферов по привычной для меня комбинации Ctrl+B, после нажатия которой достаточно начать набирать имя требуемого буфера, а потом нажать Enter или Esc, или еще какую-нибудь клавишу. Или просто тупо кликнуть мышкой ;)
Функция 'rkill-buffers' (пере)оперделяет назойливое поведение kill-buffer, которая требует подтверждения закрытия любого буфера, кроме текущего:
(require 'cl)
(defun rkill-buffers (rexp)
"Закрыть совпадающие буферы МОЛЧА"
(flet ((kill-buffer-ask (buffer) (kill-buffer buffer)))
(kill-matching-buffers rexp)))
Почему же так не сделано по умолчанию?- это Emacs, детка, тут каждый сам себе бог =)
Альтернативные варианты:
- прокрутка колесом мышки на mode line - вполне юзабельно, если открыто не очень много файлов
- tab bar mode - очевидно вкладки, вот не использую, ничего не могу сказать по поводу этого.
Ну и отдельного упоминания заслуживает функция переключения между двумя буферами: текущим и предыдущим, после переключения на предыдущий он становится текущим, т. е. циклическое переключение:
(defun switch-to-previous-buffer () (interactive) (switch-to-buffer (other-buffer (current-buffer) 1)))
Отправить комментарий