Vims Fenster sind die Anzeigeflächen, in denen Buffer sichtbar werden — und sie lassen sich beliebig oft horizontal und vertikal teilen, sodass am Ende vier, sechs oder mehr Bereiche gleichzeitig auf dem Bildschirm sind. Das ist Vims Antwort auf das, was IDEs als „Multi-Pane-Layout" bewerben: zwei Code-Files nebeneinander, oben die Quelle und unten die Tests, links die Implementierung und rechts die Typ-Definitionen. Alle Fenster-Befehle in Vim haben einen gemeinsamen Präfix: Ctrl-w, der einen kleinen eigenen „Modus" startet, in dem die nächste Taste eine Fenster-Operation auslöst. Dieser Artikel führt durch alle wichtigen Operationen — vom Splitten und Schließen über die Navigation bis zum Größen-Tuning — und schließt mit der häufig gewünschten Verbindung zu tmux-Panes via vim-tmux-navigator.

Splits erzeugen

Vim kennt zwei Split-Richtungen — horizontal (übereinander) und vertikal (nebeneinander). Beide gibt es als Ex-Befehl und als Tastenkombination:

AktionEx-BefehlTastenkombination
Horizontal teilen (gleiche Datei):split<C-w>s
Vertikal teilen (gleiche Datei):vsplit<C-w>v
Horizontal mit anderer Datei:split foo.txt(kein direktes Tasten-Pendant)
Vertikal mit anderer Datei:vsplit foo.txt

<C-w>s und <C-w>v öffnen den gleichen Buffer in einem neuen Split — was anfangs verwirrt: warum will man dasselbe File zweimal sehen? Sehr oft genau, weil man im selben File an zwei verschiedenen Stellen arbeitet — z. B. eine Funktion-Definition oben, ihre Aufruf-Stelle unten, beides in der gleichen Datei.

Wer einen Split mit einer anderen Datei öffnen will, hat zwei Wege:

text Split mit anderer Datei
" Variante A: direkt mit Ex-Befehl
:split src/util.go
:vsplit src/util.go

" Variante B: Split öffnen, dann darin Datei laden
<C-w>v               " vertikalen Split (zeigt erstmal aktuellen Buffer)
:e src/util.go       " in den neuen Split die andere Datei laden

" Variante C: Buffer-Variante :sb (siehe Buffer-Wechseln-Artikel)
:vert sb util        " vertikaler Split mit bereits geladenem Buffer

Wo der neue Split landet: splitright und splitbelow

Vims Default ist nicht intuitiv: ein horizontaler Split öffnet sich oben, ein vertikaler links. Die meisten User wollen das Gegenteil — neue Splits unten/rechts, wie in den meisten IDEs:

vim ~/.vimrc — natürlichere Split-Richtung
" Neue horizontale Splits unten statt oben
set splitbelow

" Neue vertikale Splits rechts statt links
set splitright

Diese zwei Zeilen gehören in praktisch jede moderne Vim-Konfig. Sie ändern nicht das Verhalten der Befehle, sondern nur die Default-Richtung, in der neue Splits erscheinen.

Mit Tastatur navigierst du zwischen Splits über den <C-w>-Präfix gefolgt von einer Richtung:

TastenfolgeAktion
<C-w>hzum Fenster links
<C-w>jzum Fenster unten
<C-w>kzum Fenster oben
<C-w>lzum Fenster rechts
<C-w>wnächstes Fenster (cycle vorwärts)
<C-w>Wvorheriges Fenster (cycle rückwärts)
<C-w>pzum previous Fenster (last visited)
<C-w>tzum top (obersten/erstem) Fenster
<C-w>bzum bottom (untersten/letzten) Fenster

Die hjkl-Navigation ist konsistent mit der Cursor-Bewegung — links, unten, oben, rechts. Wer das verinnerlicht hat, navigiert in einem 2×2-Layout aus vier Fenstern blind. Die ständige <C-w>-Präfix-Eingabe kann nerven; viele Konfigs mappen das auf bequemere Sequenzen:

vim ~/.vimrc — bequemere Window-Navigation
" Direkt Ctrl-hjkl statt Ctrl-w hjkl
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l

Achtung: <C-l> ist im Default-Vim „Bildschirm neu zeichnen" (:redraw). Wer das Mapping setzt, verliert diese Funktion — was im Alltag aber selten gebraucht wird.

Fenster verschieben und reorganisieren

Splits lassen sich nachträglich umordnen, ohne sie schließen und neu öffnen zu müssen. Die wichtigsten Befehle:

TastenfolgeAktion
<C-w>Haktuelles Fenster ganz nach links verschieben (volle Höhe)
<C-w>Jaktuelles Fenster ganz nach unten (volle Breite)
<C-w>Kaktuelles Fenster ganz nach oben
<C-w>Laktuelles Fenster ganz nach rechts
<C-w>rFenster im aktuellen Stack rotieren
<C-w>RFenster im aktuellen Stack rückwärts rotieren
<C-w>xaktuelles Fenster mit dem nächsten vertauschen
<C-w>Taktuelles Fenster in einen neuen Tab verschieben

<C-w>H/J/K/L (Großbuchstaben!) sind besonders nützlich: wenn das aktuelle Layout sich „falsch" anfühlt — z. B. zwei horizontale Splits, von denen man jetzt einen lieber vertikal hätte —, drückt man im richtigen Fenster <C-w>L und es springt an die rechte Seite mit voller Höhe. Layout-Reorganisation in zwei Tasten.

<C-w>T (großes T für Tab) ist die nützliche Variante, wenn ein Split zum eigenständigen Workspace werden soll: zwei Fenster sind zu viel auf dem Bildschirm, eines davon braucht aber weiterhin Aufmerksamkeit — <C-w>T schiebt es in einen neuen Tab.

Größe anpassen

Splits haben eine Default-Größe (gleichmäßig verteilt). Sie lässt sich auf vier Wegen ändern:

Inkrementelle Resize

TastenfolgeAktion
<C-w>+aktuelles Fenster eine Zeile größer (Höhe)
<C-w>-eine Zeile kleiner
<C-w>>eine Spalte breiter
<C-w><eine Spalte schmaler

Mit Count multipliziert: 10<C-w>> macht das Fenster 10 Spalten breiter, 5<C-w>+ 5 Zeilen höher.

Absolute Resize via Ex-Befehl

text Ex-Befehle zur Größe
:resize 20           " Höhe auf 20 Zeilen
:resize +10          " 10 Zeilen größer
:vertical resize 60  " Breite auf 60 Spalten
:vert res 60         " Kurzform

Maximieren und Ausgleichen

TastenfolgeAktion
<C-w>=alle Fenster auf gleiche Größe bringen
<C-w>_aktuelles Fenster maximal hoch (volle Höhe-Verfügbarkeit)
<C-w> + &#124;aktuelles Fenster maximal breit

<C-w>= ist der häufigste Reset-Befehl: nach mehreren Resize-Operationen wird das Layout schief — <C-w>= bringt alle Fenster wieder auf gleiche Größe. Sehr beruhigend.

<C-w>_ und <C-w>| zoomen das aktuelle Fenster maximal in die jeweilige Richtung. Vorsicht: die anderen Fenster bleiben sichtbar, schrumpfen aber auf die Minimal-Größe (Default: 1 Zeile bzw. Spalte). Mit <C-w>= lässt sich das wieder ausgleichen.

Auto-Resize beim Fokuswechsel

Eine sehr praktische, oft übersehene Konfiguration: bei jedem Fokuswechsel das aktive Fenster auf eine Mindest-Größe vergrößern. Über winwidth und winheight:

vim ~/.vimrc — Auto-Resize
" Aktuelles Fenster bekommt mindestens 80 Spalten Breite,
" inaktive Fenster werden entsprechend zusammengedrückt.
set winwidth=80
set winminwidth=10

" Analog für Höhe
set winheight=30
set winminheight=5

Damit „atmet" das Layout: das aktive Fenster wird groß, die anderen schrumpfen. Wechselt man, expandiert das vorherig kleine Fenster automatisch. Im Alltag mit 3+ Splits ist das angenehmer als feste Größen.

Fenster schließen

Vier Wege, einen Split loszuwerden:

BefehlWirkung
:q / <C-w>qaktuelles Fenster schließen (Buffer bleibt, wenn anderswo angezeigt)
:close / <C-w>caktuelles Fenster schließen — explizit; weigert sich beim letzten Fenster
:only / <C-w>oalle anderen Fenster schließen, nur das aktuelle bleibt
:hideFenster schließen, Buffer wird hidden (statt schließen)

:q ist der gewohnte Befehl — er funktioniert hier wie überall. Beim letzten Fenster im letzten Tab schließt :q den ganzen Vim. :close ist sicherer, wenn man garantieren will, dass nur ein Fenster verschwindet und Vim nicht versehentlich beendet wird.

:only (oder <C-w>o mit O für „only") ist das Fenster-Aufräum-Kommando: alle anderen Splits weg, nur das aktuelle bleibt. Praktisch, wenn das Layout aus den Fugen geraten ist und man frisch starten will, ohne die Buffer zu verlieren.

vim-tmux-navigator — die Brücke zu tmux

Wer Vim innerhalb einer tmux-Session nutzt, hat plötzlich zwei Split-Systeme: tmux-Panes außerhalb des Vim-Fensters, Vim-Splits innerhalb. Beide haben eigene Navigation, beide kollidieren bei den <C-h/j/k/l>-Mappings.

Das Plugin christoomey/vim-tmux-navigator löst das elegant: es macht <C-h/j/k/l> zu universellen Navigatoren — sie navigieren zwischen Vim-Splits, wenn der nächste Pane noch in Vim ist, und springen zu tmux-Panes, wenn am Rand. Ein nahtloser Layout-Wechsel.

Setup in zwei Schritten:

vim ~/.vimrc — Plugin laden
" vim-tmux-navigator installieren (mit vim-plug oder Manager der Wahl)
Plug 'christoomey/vim-tmux-navigator'
text ~/.tmux.conf — Bindings spiegeln
# Smart pane switching with awareness of Vim splits.
# See: https://github.com/christoomey/vim-tmux-navigator
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
    | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h' 'select-pane -L'
bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j' 'select-pane -D'
bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k' 'select-pane -U'
bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l' 'select-pane -R'

Nach diesem Setup sind <C-h/j/k/l> an jeder Stelle „navigiere in die Richtung" — egal ob die Ziel-Pane in Vim oder tmux ist. Ein erheblicher Workflow-Gewinn für alle, die Vim und tmux kombinieren.

Layout-Workflows aus der Praxis

Drei typische Layouts und wie sie entstehen:

text Workflow 1
:e src/foo.go        " Code-Datei öffnen
:vsplit              " vertikal teilen — zweite Kopie rechts
:e src/foo_test.go   " im rechten Split die Test-Datei laden

Layout 2: Drei Files, eines oben, zwei unten

text Workflow 2
:e src/main.go       " main im Vollbild
:split src/util.go   " horizontal teilen — util darüber
" (jetzt: main unten, util oben)
<C-w>j               " in main-Fenster wechseln
:vsplit src/config.go  " vertikal teilen — config rechts daneben
" (Layout: util oben (volle Breite), main + config unten)

Layout 3: Aus 2×2 wieder zu einem Fenster

text Workflow 3
" Annahme: 2×2-Layout existiert, du willst zurück zu einem Fenster
" (z. B. wegen einer länglichen Lese-Session in main.go)
<C-w>h<C-w>k         " zum Fenster oben-links navigieren
:only                " alle anderen Splits schließen
" Buffer bleiben im Speicher (mit set hidden)

Im Wechsel zwischen diesen Layouts liegt der eigentliche Vim-Workflow-Vorteil. Mit set hidden aus dem Buffer-Konzept-Artikel sind alle Buffer im Speicher — Layouts können beliebig umgebaut werden, ohne dass Inhalte verloren gehen.

Besonderheiten

Buffer ist nicht gleich Fenster

Ein Buffer kann in mehreren Fenstern gleichzeitig offen sein — alle zeigen synchron denselben Inhalt. Wer im selben File an zwei Stellen parallel arbeiten will, drückt <C-w>s (oder <C-w>v) und navigiert in beiden Fenstern unabhängig zur jeweiligen Position. Beide bleiben dieselbe Datei.

`=` ist die Reset-Taste

Egal wie schief das Layout durch verschiedene Resize-Operationen geworden ist — <C-w>= bringt alle Fenster auf gleiche Größe. Im Alltag der häufigste „mach das Layout wieder normal"-Befehl.

`T` für „Tab aus Split machen"

Wenn ein Split zu eigenständig wird, um in einem geteilten Layout zu leben, schiebt <C-w>T (großes T) ihn in einen neuen Tab. Aus einem 4-Fenster-Layout werden so zwei 2-Fenster-Tabs — übersichtlicher, ohne Inhalte zu verlieren.

Counts vor `` funktionieren

3<C-w>j springt drei Fenster nach unten in einem komplexen Layout. Selten gebraucht, aber bei Layouts mit fünf oder mehr Splits manchmal schneller als mehrfaches <C-w>j.

`set noequalalways` schaltet Auto-Equalize aus

Vims Default ist: nach jedem Öffnen oder Schließen eines Fensters werden die übrigen automatisch gleichgroß gemacht. Bei custom Layouts ist das nervig. set noequalalways schaltet das aus — Resizes bleiben dann manuell unter Kontrolle.

Maus funktioniert auch für Splits — mit Vorbehalt

Mit set mouse=a lassen sich Splits per Click fokussieren und per Drag (auf der Trennlinie) resizen. Praktisch für den Übergang, langfristig aber langsamer als die Tasten-Variante. Wer Vim ernsthaft lernen will, sollte die Maus für Splits nicht zur Gewohnheit werden lassen.

Weiterführende Ressourcen

Externe Quellen

Verwandte Artikel

/ Weiter

Zurück zu Buffer, Fenster & Tabs

Zur Übersicht