поведение списочных буферов emacs - PullRequest
46 голосов
/ 05 августа 2009

В GNU emacs, каждый раз, когда я нажимаю Ctrl-x Ctrl-b , чтобы увидеть все мои буферы, окно разделяется, чтобы показать список буферов, или если мое окно уже разбито на 2 (например, у меня будет оболочка, запущенная в нижнем окне), список буферов появится в другом окне.

Мое желаемое поведение - чтобы список буферов появлялся в моем активном окне, чтобы я мог выбрать нужный буфер и продолжить работу в том же окне, вместо того, чтобы Ctrl-x Ctrl-o в другой буфер, выбрав буфер (с помощью введите ) и отредактировав этот буфер в другом окне ... Я гуглил по нему, но это, кажется, не является общим желанием? Интересно, есть ли у кого-нибудь подходящее (или другое) решение?

Ответы [ 9 ]

59 голосов
/ 05 августа 2009

Возможно, вы захотите повторно связать C-x C-b , чтобы вызвать buffer-menu вместо list-buffers:

(global-set-key "\C-x\C-b" 'buffer-menu)
13 голосов
/ 05 августа 2009

Просто настройте переменную same-window-regexps. display-buffer отобразит любой буфер, имя которого совпадает с регулярным выражением, в текущем выбранном окне.

(Вы хотите добавить "[*]Buffer List".)

13 голосов
/ 05 августа 2009

не совсем решение, но ido-mode предоставляет другой и мощный способ взаимодействия с буферами. C-x b отобразит список всех открытых буферов, а выбранный вами откроется в текущем окне.

4 голосов
/ 15 января 2015

Странно, здесь нет ответа о ibuffer.

Я бы порекомендовал это как стандартное изменение для большинства пользователей Emacs:

(global-set-key (kbd "C-x C-b") 'ibuffer)

ibuffer - очень продвинутая замена списка буферов по умолчанию, он не только обеспечивает точное запрашиваемое поведение, но и предоставляет множество других функций.

Я перечислил несколько основ фильтрации и группировки ibuffer в Emacs: помогите мне разобраться с управлением файлами / буфером , но не забудьте прочитать документацию для подробностей.

4 голосов
/ 31 октября 2009

Попробуйте добавить

(ido-mode 1)

на ваш .emacs, и наслаждайтесь результатом:)

3 голосов
/ 05 августа 2009

Если вам нравится исходный список буферов (в отличие от решения '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)))

Это та же функция, что и раньше, только в текущем окне.

2 голосов
/ 06 августа 2009

Я настоятельно рекомендую 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)

Правильно управляет буферами и конфигурацией окна, поэтому для всего требуется минимальное количество нажатий клавиш.

1 голос
/ 05 августа 2009

Не уверен, откуда я это взял, но:

;;; Faster buffer switching
(global-set-key [(C tab)] 'buffer-menu) 

Это позволяет Ctrl-Tab отображать все буферы в текущем окне. Затем вы можете перейти к буферу и нажать Enter, чтобы посетить его.

0 голосов
/ 05 августа 2009

Другое решение «не то, что вы просили»: не выбирайте нужный буфер с помощью мыши, скорее закончите вводить его имя (используйте табуляцию, чтобы уменьшить количество нажатий клавиш и повысить точность), а затем нажмите «Return». Список буферов исчезнет, ​​а новый файл откроется в ранее активном окне.

...