Поведение списочных буферов emacs
В GNU emacs каждый раз, когда я нажимаю Ctrl-x Ctrl-b, чтобы увидеть все мои буферы, окно разделяется, чтобы показать список буферов, или если мое окно уже разбито на 2 (например, у меня будет оболочка работает в нижнем окне), список буферов появляется в другом окне.
Мое желаемое поведение - чтобы список буферов появлялся в моем активном окне, чтобы я мог выбрать нужный буфер и продолжить работу в том же окне, вместо того, чтобы нажимать Ctrl-x Ctrl-o для другого буфера, выбирая буфер (с вводом) и редактирование этого буфера в другом окне... Я гуглил это, но это, кажется, не является общим желанием? Интересно, есть ли у кого-нибудь (или другое) решение?
9 ответов
Вы можете перепривязать Cx Cb для вызова buffer-menu
скорее, чем list-buffers
:
(global-set-key "\C-x\C-b" 'buffer-menu)
Просто настройте переменную same-window-regexps
, display-buffer
отобразит любой буфер, имя которого совпадает с регулярным выражением, в текущем выбранном окне.
(Вам захочется добавить[*]Buffer List
".)
Не совсем решение, но ido-mode
предоставляет другой и мощный способ взаимодействия с буферами. C-x b
Затем отобразится список всех открытых буферов, а выбранный вами откроется в текущем окне.
Странно, здесь нет ответа о ibuffer
,
Я бы рекомендовал это как стандартное изменение для большинства пользователей Emacs:
(global-set-key (kbd "C-x C-b") 'ibuffer)
ibuffer - очень продвинутая замена списка буфера по умолчанию, он не только показывает точное запрашиваемое поведение, но и предоставляет множество других функций.
Я перечислил несколько основ фильтрации и группировки ibuffer в Emacs: помогите мне разобраться с управлением файлами / буфером, но не забудьте прочитать документацию для получения более подробной информации.
Попробуй добавить
(ido-mode 1)
на ваш.emacs, и наслаждайтесь результатом:)
Если вам нравится оригинальный список буферов (в отличие от 'buffer-menu
Решение, предложенное другими), можно использовать так:
(global-set-key (kbd "C-x C-b") 'my-list-buffers)
(defun my-list-buffers (&optional files-only)
"Display a list of names of existing buffers.
The list is displayed in a buffer named `*Buffer List*'.
Note that buffers with names starting with spaces are omitted.
Non-null optional arg FILES-ONLY means mention only file buffers.
For more information, see the function `buffer-menu'."
(interactive "P")
(switch-to-buffer (list-buffers-noselect files-only)))
Это та же функция, что и раньше, только в текущем окне.
Я настоятельно рекомендую bs.el с http://www.geekware.de/software/emacs/ установить его и:
(require 'bs)
(add-hook 'bs-mode-hook 'turn-on-font-lock)
(global-set-key "\C-x\C-b" 'bs-show)
Он правильно управляет буферами и конфигурацией окон, поэтому все требует минимального количества нажатий клавиш.
Не уверен, откуда я это взял, но:
;;; Faster buffer switching
(global-set-key [(C tab)] 'buffer-menu)
Это заставляет Ctrl-Tab отображать все буферы в текущем окне. Затем вы можете перейти к буферу и нажать Enter, чтобы посетить его.
Другое решение "не то, что вы просили": не выбирайте нужный буфер с помощью мыши, скорее завершите ввод его имени (используйте завершение табуляции, чтобы уменьшить количество нажатий клавиш и повысить точность), а затем нажмите "Return". Список буферов исчезнет, а новый файл откроется в ранее активном окне.