Three concepts that get confused constantly
Vim's three layers — buffers, windows, tabs — sound like the same thing but they're not. Once the mental model clicks, working on a real project with dozens of open files becomes natural.
Buffers — the files you've opened
A buffer is a file held in memory. Every file you open with :e or via the command line becomes a buffer. Buffers exist whether or not you can see them; they're the inventory.
Windows (splits) — the views into buffers
A window is a viewport showing one buffer. :sp creates a horizontal split, :vs a vertical one. Each split is a window — and the same buffer can be shown in multiple windows at once.
Tabs — workspaces, not browser tabs
This is the part that confuses everyone. A Vim tab is not a single open file like in a browser. A Vim tab is a collection of windows — a whole workspace layout. Most experienced users don't use tabs much; they prefer many buffers + a few splits in a single tab.
Buffer commands you'll actually use
:ls lists open buffers with their numbers and modified states. :b N jumps to buffer N; :b name jumps by partial filename match. :bn / :bp cycle. :bd deletes (closes) the current buffer. :bufdo cmd runs a command in every buffer — useful for save-all (:bufdo w) or replace-all-files (:bufdo %s/old/new/g | w).
Window movement
The Ctrl-w prefix is the gateway to window operations. Ctrl-w h/j/k/l moves between windows in those directions. Ctrl-w = equalizes sizes. Ctrl-w _ maximizes height; Ctrl-w | maximizes width. Ctrl-w o closes all other windows ("only this one"). Ctrl-w q closes the current window.