I've been using emacs for all of my text editing needs for the past three years now. When I'm in a single file, working on code or whatnot, I'm fairly efficient. With two files, I can "C-x b RET" between them and I do fine. However, whenever I need to be working on more than two files at a time, I tend to get lost.
Here are some of the problems that I'd like to work on:
-
I forget what some of my buffers are called, but I don't understand why C-x C-b splits my window into two buffers and exits the mini buffer. Sure I can switch buffers and choose a buffer to visit, but this feels unintuitive, and leaves me with two buffers open.
-
When I visit a directory rather than a file, I have a convenient list of all of the files and directories. I usually want to do one of two things with this: 1) Open a single file and never see this buffer again OR 2) Open a bunch of files and never see this buffer again. I don't really know how to do this, as moving the point to a file and hitting return doesn't do either of these things.
-
I know that my buffers aren't like tabs, but I have an inclination to want to scroll through them to find what I want. I don't know of any key-bindings for this, but I'd like it to be M-n / M-p or the like. Then again, this may be a horribly inefficient way to switch buffers.
-
When I open interactive help of any kind (for example in ESS), I have a habit of switching back to the buffer I was working in and using C-x 1 to get back to a single buffer. When I do this, however, the help buffer hangs around in my buffer list, further confusing me. I know I can switch to that buffer, kill it, switch back, and then go back to a single buffer, but this seems wrong.
The way I've dealt with this so far involves using a tiling window manager and a few emacs windows in different work-spaces, rather than actually learn the best way to manage a number of files in emacs. I don't necessarily want to change emacs to better fit my needs (although I am open to that if it fits in with what I'm about to say), instead, I'd like to grok the thought process behind handling files/buffers the way that emacs does, and how I can be more efficient with it.
Any answer that would help me understand the correct way, or a more efficient way to manage my buffers or files would be greatly appreciated.
Best Solution
Bind
C-x C-b
toibuffer
. 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.Use
a
instead ofRET
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.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.)
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
andC-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.