简体   繁体   中英

emacs list-buffers behavior

In GNU emacs, every time I hit Ctrl-x Ctrl-b to see all of my buffers, the window is split to show the buffer list, or if I have my window already split in 2 (for instance, I will have a shell running in the lower window), the buffer list appears in the other window.

My desired behavior is for the buffer list to appear in my active window so that I can select the buffer I want and continue to working in the same window, rather than having to Ctrl-x Ctrl-o to the other buffer, selecting the buffer (with enter ) and editing that buffer in the other window... I've googled for it but it doesn't seem to be a common desire? I wonder if anyone has an elispy (or other) solution?

您可能希望重新绑定Cx Cb以调用buffer-menu而不是list-buffers

(global-set-key "\C-x\C-b" 'buffer-menu)

not exactly a solution, but ido-mode provides a different and powerful way to interact with buffers. Cx b will then show a list of all the open buffers, and the one you select will open in the current window.

Just customize the variable same-window-regexps . display-buffer will display any buffer whose name matches a regexp there in the currently-selected window.

(You will want to add " [*]Buffer List ".)

Try to add

(ido-mode 1)

to your .emacs, and enjoy the result :)

Strangely, there isn't an answer here about ibuffer .

I would recommend this as a standard change for the majority of Emacs users:

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

ibuffer is a very advanced replacement for the default buffer listing, and not only features the exact behaviour requested, but provides a wealth of other functionality.

I listed a few ibuffer filtering and grouping basics in Emacs: help me understand file/buffer management , but be sure to read the documentation for details.

If you like the original buffer list (as opposed to the 'buffer-menu solution proposed by others), you can use this:

(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)))

Which is the same function as before, only in the current window.

I highly recommend bs.el from http://www.geekware.de/software/emacs/ Install it and:

(require 'bs)
(add-hook 'bs-mode-hook 'turn-on-font-lock)
(global-set-key "\C-x\C-b" 'bs-show)

It manages buffers and window configuration in the right way, so everything requires minimum number of keystrokes.

Not sure where I got this but:

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

This makes Ctrl-Tab display all buffers in the current window. You can then navigate to a buffer and hit Enter to visit it.

Another not-what-you-asked-for solution: don't select the desired buffer with the mouse, rather finish typing its name (use tab-completion to reduce keystrokes and increase accuracy), then hit return. The buffer list will disappear, and the new file will be open in the previously active window.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM