Emacs: help me understand file/buffer management

Solution 1:

  1. Bind C-x C-b to ibuffer. This is a better buffer listing facility with many advanced features, and its default behaviour is to replace the current buffer with the buffer listing, and then bury the listing when you select a buffer (leaving you with the newly-selected buffer in place of the original one).

    You can simply use C-x b to enter your selection in the mini-buffer, of course; however the tab-completion (which is needed to make this a viable option, IMO) does open a new window temporarily, at which point I think you might as well familiarise yourself with something with more features.

  2. Use a instead of RET when selecting from dired. This kills the dired buffer instead of leaving it behind. C-h m in any buffer will show you the help for its major mode (followed by help for the minor modes), and you can read about all the available dired key bindings there.

  3. http://www.emacswiki.org/cgi-bin/wiki/TabBarMode ? (edit: I prefer Rémi's answer for this one, but TabBarMode would give you the visual tab element if you were particularly keen on that.)

  4. q is bound to a 'quit' function in a great many major modes. Generally it buries the buffer rather than killing it, but I certainly find that fine.

To elaborate a little on #1, ibuffer has lots of nice features, and M-x customize-group ibuffer RET will give you some idea of how you can customise it to your liking.

Furthermore, you can filter the buffer list by many criteria (again, use C-h m to see its help page), and then generate a 'group' definition from the current filters, and save your custom filters and groups for future usage.

For example:

  • / f ^/var/www/ RET: filter buffer list to show only filenames starting with /var/www/.
  • / s Web filters RET: name and save active filter set to your init file.
  • / g Web development RET: create a named group from the active filters.
  • / S My groups RET: name and save group definitions to your init file.
  • / r Web filters RET: invoke the "Web filters" filters.
  • / R My groups RET: invoke the "My groups" groups.
  • RET on a group name to collapse or expand it.
  • C-k and C-y to kill and yank groups, to re-arrange them.
  • C-h m for more information...

This way you can have a single Emacs instance running, and create filters and groups for different types of task, and easily switch between them.

Solution 2:

I think you will really enjoy Ido for dealing with multiple buffers who's names you can't exactly remember. When you type C-x b it shows a list of open buffers in most used order. As you type some of the characters in a buffer name the list is filtered. The characters you type don't have to be at the begging of the name or contiguous. Using C-f, C-b or left/right arrow keys cycles through the buffer choices.

Also see Smex for Ido like functionality for M-x

Closing windows is done with C-x 0. Intentionally splitting the window is done with C-x 2 for horizontal, C-x 3 for vertical. I love this feature, since it allows me to have test and production code visible at the same time. C-x o takes me to the other window.

Solution 3:

I use C-x right (or C-x C-right) and C-x left (or C-x C-right) to go to the next and previous buffer. I don't mind anymore off the few buffer that lay around in Emacs but you could use k in the buffer list to kill the buffer you don't use anymore.

Solution 4:

You can also try Iswitchb mode which provides auto-completion for buffer names when you switch buffers via C-x b.

To activate:

M-x iswitchb-mode

Or add to your .emacs file:

(iswitchb-mode)

It is similar to Ido mode for buffer switching but a bit more lightweight.

Also, if you want a more customizable listing of your buffers then use M-x bs-show as an alternative to C-x C-b. In that buffer type ? to get a list of actions you can perform.

Solution 5:

I think the number one most useful extension for flipping through buffers is Anything. It lets you start typing part of a buffer (or file!) name and it will figure out what you want. I've rebound C-x b to anything-for-buffers. It makes life so much better.