I don't think the tools are at fault, here. It's more how you use them.
Tabs are not designed at all as file proxies like they are in others editors. Tabs are workspaces, allowing you to organize windows how you like them. They are the best candidates for your
Migrations Seeds ...
scenario.
Here is one possible way to create a "Migration" tab:
:tabnew | lcd path/to/Migration
From there, all the windows you create in that tab will inherit the
Migration
working directory and every:e
,:sp
,:vs
or even:vim
will start from that working directory.Also, this will make NERDTree and netrw show the content of your local working directory by default.
See
:help seeting-tabline
and:help setting-guitablabel
if you want to change the name of the tab.You should use CtrlP's path mode to do the matching on the whole path rather than the filename:
fbruse
would match:
foo/bar/user
but not:
baz/vroom/user
With the tab setup above, CtrlP's suggestions should be restrained to the
Migration
directory, making it a lot faster.CtrlP is not perfect though: it can be slow in large projects so make sure you read the whole documentation.
An "always on" list of open buffers may be a good idea when you have a small number of them but, like tabs, it obviously doesn't scale at all. It is vastly better to show the list when you actually want to switch buffers: less screen estate and brain cells wasted!
Be aware, though, that while it is possible to define a window-local argument list, there's AFAIK no way to define a window-local buffer list. Since the argument list always leaks into the buffer list and the buffer list is global, buffer commands will always deal with the same quantity of buffers, no matter what tab you are in. Thus limiting the general usefulness of tabs.
Files are not a very good metaphor for dealing with large projects: you must keep a complex symbol->file map in your head while your program is made of functions, classes, arrays, variables… not files.
Using tags (
:help tags
) is a very convenient way to jump around your project::tag foo :tag bar<Tab> :ptag /baz<Tab>
And CtrlP's
:CtrlPTags
makes it almost fun.
FWIW, tag-jumping is my favorite navigation technique and I usually don't use tabs or windows.