• ↑↓ to navigate
  • ↵ to open
  • ⟶ to select
  • ⌘ ⌥ ↵ to open in a panel
  • ←→ to navigate
  • esc to dismiss
⌘ '
keyboard shortcuts

The Problem

Editing multiple files sequentially requires efficiently loading, saving, and switching between file buffers.

Core Idea

A buffer is an in-memory copy of a file. Vim provides commands to load, save, and navigate between open buffers.

How It Works

Basic buffer commands:

CommandAction
:e <path>Open (edit) a file
:wSave current buffer
:w <path>Save to new file
:saveas <path>Save buffer as new file
:xSave if modified and quit
:qQuit (fails if unsaved)
:q!Quit without saving
:qa!Quit all, ignore changes
:bnNext buffer
:bpPrevious buffer

Key Properties

  • :q! discards unsaved changes
  • :x only writes if buffer is modified
  • ZZ = :wq (write and quit)
  • Buffer list persists until explicitly cleared

Edge Cases & Gotchas

  • Unload buffer vs delete buffer are different
  • Hidden buffers: :bn fails with unsaved changes — use :bn! or :set hidden
  • :b# switches to alternate buffer

Visual Explanation

digraph aliases____buffer___e___bn___bp___w___q__ {
  rankdir=LR
  node [shape=box style=filled fillcolor="#f0f4ff" fontname="Helvetica"]
  A [label="Aliases: "[Buffer, :\nInput"]
  B [label="Aliases: "[Buffer, :\nCore Mechanism"]
  C [label="Aliases: "[Buffer, :\nOutput"]
  A -> B [label="triggers"]
  B -> C [label="produces"]
}

Semantic Network

graph semantic_aliases____buffer___e___bn___bp___w___q__ {
  layout=neato
  node [shape=ellipse fontname="Helvetica" fontsize=11 style=filled]
  THIS [label="Aliases: "[Buffer, :" fillcolor="#ffd700" fontsize=13 style="filled,bold"]
  REL1 [label="Related Concept" fillcolor="#f0f0f0"]
  REL2 [label="Builds Into" fillcolor="#d4edda"]
  THIS -- REL1 [label="related"]
  THIS -- REL2 [label="builds into"]
}

Connections