Wer aus einer IDE wie VS Code, Sublime oder JetBrains zu Vim kommt, hat ein klares Bild im Kopf, was ein Tab ist: eine geöffnete Datei, die als Reiter über dem Editor sichtbar bleibt. Vim-Tabs sind etwas völlig anderes — und genau aus diesem Missverständnis entsteht die häufigste Anfänger-Frustration mit dem Vim-Layout-Modell. Ein Vim-Tab ist kein Datei-Reiter, sondern ein Workspace-Container: er enthält ein oder mehrere Fenster, die wiederum Buffer anzeigen. Ein Tab pro Datei zu öffnen wäre, als würde man in einer IDE pro Datei einen neuen Workspace erzeugen — funktioniert, ist aber das falsche Werkzeug. Dieser Artikel klärt das Modell, zeigt die Tab-Befehle und beschreibt, wann Tabs tatsächlich der richtige Hebel sind.

Das Missverständnis

In den meisten grafischen Editoren ist die Beziehung „eine Datei = ein Tab". Beim Öffnen einer neuen Datei kommt ein neuer Reiter hinzu, der die Datei repräsentiert; beim Schließen verschwindet er. Aus dieser Erfahrung heraus erwartet man von Vim dasselbe — und ist dann verwirrt, dass :e neue-datei.txt keinen neuen Tab erzeugt, sondern den aktuellen Buffer durch die neue Datei ersetzt.

Vim macht die Trennung anders:

Vim-KonzeptEntspricht in einer IDE
Buffer„geöffnete Datei" (ohne sichtbares UI-Element)
Window„Editor-Pane" (eine sichtbare Anzeigefläche)
Tab„Workspace" oder „Projekt-View"

Ein einzelner Vim-Tab kann fünf Buffer in drei Fenstern enthalten — ein typisches Refactoring-Layout. Ein anderer Tab kann zwei Buffer in einem Split-Layout zeigen, der für eine separate Aufgabe gedacht ist. Beide Tabs sind voneinander unabhängige Layouts, aber sie teilen sich die Buffer-Liste — ein Buffer, der in Tab 1 angezeigt wird, kann gleichzeitig in Tab 2 sichtbar sein.

text Typisches Vim-Tab-Setup
Tab 1: "Feature-Implementation"
  - Fenster 1: src/feature.go
  - Fenster 2 (vertikaler Split): tests/feature_test.go
  - Fenster 3 (horizontaler Split unten): docs/feature.md

Tab 2: "Database-Migration"
  - Fenster 1: migrations/001_initial.sql
  - Fenster 2: schema.sql

Tab 3: "Debugging"
  - Fenster 1: logs/error.log
  - Fenster 2: src/handler.go

Drei separate Workspaces, jeder mit eigenem Layout, jeder unabhängig wechselbar — aber alle in derselben Vim-Instanz, alle teilen Buffer-Liste, Marks, Registers, Undo-Historie.

Tabs erzeugen

Drei Wege, einen neuen Tab anzulegen:

BefehlAktion
:tabnewleerer neuer Tab ([No Name]-Buffer)
:tabnew foo.txtneuer Tab mit foo.txt geöffnet
:tabedit foo.txtSynonym für :tabnew foo.txt
<C-w>Taktuelles Fenster aus dem aktuellen Tab in einen neuen Tab verschieben

<C-w>T (großes T) ist die häufig vergessene Variante: wenn ein Split im aktuellen Tab zu eigenständig wird, schiebt er ihn in einen neuen Tab — das vorherige Layout bleibt erhalten, das verschobene Fenster bekommt seinen eigenen Workspace.

text Tab aus Split machen
" Annahme: dreigeteiltes Layout im aktuellen Tab
" Cursor im Split mit der Log-Datei, der jetzt eigenen Tab braucht.
<C-w>T               " Log-Split wird neuer Tab

Zwischen Tabs navigieren

Die zentralen Tab-Navigations-Befehle:

Taste / BefehlAktion
gtnächster Tab (cycle vorwärts)
gTvorheriger Tab (cycle rückwärts)
Ngtzum N-ten Tab (z. B. 2gt = zweiter Tab)
:tabnext / :tabnnächster Tab (Ex-Variante)
:tabprev / :tabpvorheriger Tab
:tabfirsterster Tab
:tablastletzter Tab
:tabnext 3zum Tab Nr. 3

gt und gT sind die Default-Tastenkombinationen — g als Präfix, t/T für tab/Tab-zurück. Sie sind im Alltag schnell zu drücken und brauchen kein Mapping.

Mit Count: 2gt springt zum zweiten Tab (1-basiert). Das ist eine der wenigen Vim-Befehle, bei denen ein Count nicht „Aktion N-mal" bedeutet, sondern „springe zu Position N" — ähnlich wie 5G für Zeile 5.

text Tab-Navigation
gt                   " nächster Tab
gT                   " vorheriger Tab
2gt                  " direkt zum zweiten Tab
:tabnext             " nächster (gleich wie gt)
:tabfirst            " erster Tab
:tablast             " letzter Tab

Tabs verschieben

Die Reihenfolge der Tabs lässt sich nachträglich ändern:

BefehlAktion
:tabmoveaktuellen Tab ans Ende verschieben
:tabmove 0aktuellen Tab an den Anfang
:tabmove 3aktuellen Tab nach Position 3 (0-basiert)
:tabmove +1um eine Position nach rechts verschieben
:tabmove -1um eine Position nach links

:tabmove +1 und :tabmove -1 sind im Alltag die häufigsten — sie funktionieren wie „Tab nach links/rechts schieben" in einer IDE. Da es kein eingebautes Tasten-Mapping dafür gibt, lohnt sich eine Konfiguration:

vim ~/.vimrc — Tab-Verschiebe-Mappings
" Tab nach links/rechts verschieben
nnoremap <silent> <leader>th :tabmove -1<CR>
nnoremap <silent> <leader>tl :tabmove +1<CR>

Tabs schließen

Drei Befehle zum Schließen — analog zu den Fenster-Befehlen, nur eine Ebene höher:

BefehlAktion
:tabclose / :tabcaktuellen Tab schließen
:tabclose NTab Nr. N schließen
:tabonly / :taboalle anderen Tabs schließen, nur aktueller bleibt

:tabclose schließt den aktuellen Tab, aber lässt die Buffer im Speicher. Wer in Tab 2 fünf Buffer offen hatte und den Tab schließt, hat die fünf Buffer weiterhin in der Buffer-Liste — sie sind nur nicht mehr in einem Fenster sichtbar. Mit :b N lassen sie sich zurückholen.

Das ist konsistent mit Vims Trennung Buffer/Window/Tab: Tabs sind Layout-Container, nicht Buffer-Container. Ihre Auflösung beendet die Anzeige, nicht den Inhalt.

Tab-Inspektion und Befehle über Tabs

Vier nützliche Werkzeuge:

text Tab-Werkzeuge
:tabs                " Liste aller Tabs mit ihren Fenstern und Buffern
:tabnew | call :tabmove(2)   " in Vimscript: Tab erzeugen und positionieren
:tabdo set number    " "set number" in jedem Tab ausführen
:tabdo bd            " Buffer in jedem Tab schließen (Vorsicht)

:tabs zeigt eine kompakte Übersicht:

Tab page 1
#   src/main.go         (im linken Fenster)
    src/util.go         (im rechten Split)
> + src/handler.go      (aktuelles Fenster, modifiziert)

Tab page 2
#   migrations/001.sql

Tab page 3
#   logs/error.log
    src/handler.go      (in mehreren Tabs sichtbar)

Das > markiert den aktuellen Tab, + zeigt modifizierte Buffer, # den Alternate-Buffer-Status. Praktisch zur schnellen Orientierung in einem Setup mit vielen Tabs.

:tabdo ist die Iteration-Variante über alle Tabs — analog zu :bufdo und :windo. Es führt einen Ex-Befehl im aktuellen Fenster jedes Tabs aus.

Tab-Labels anpassen

Default zeigt Vim den aktuellen Dateinamen des aktiven Fensters als Tab-Label — oft nicht aussagekräftig genug, wenn ein Tab fünf Buffer enthält und der Datei-Name nicht das Workspace-Thema beschreibt.

Vim erlaubt eigene Tab-Labels über die Option tabline und einen optionalen Bezeichner pro Tab:

text Tab-Bezeichner setzen
:let t:tab_name = "Refactoring"
" jetzt kann eine custom tabline diese Variable in der Beschriftung
" verwenden.

Vim hat per Tab eigene tab-lokale Variablen (t:variable), die für genau diesen Zweck gedacht sind. In Verbindung mit einer eigenen tabline-Funktion (oder einem Plugin wie vim-airline, das das automatisch macht) kann jeder Tab einen sprechenden Namen tragen.

Plugins, die Tab-Labels visuell verbessern:

  • vim-airline mit let g:airline#extensions#tabline#enabled = 1 — IDE-ähnliche Tab-Leiste.
  • lightline mit eigenem Tab-Component.
  • taboo.vim — fokussiert auf benannte Tabs.

Für den Anfang reicht der Default; sobald man regelmäßig mit drei oder mehr Tabs arbeitet, lohnt sich eines dieser Plugins. Mehr im Artikel Tabline anpassen.

Wann Tabs tatsächlich sinnvoll sind

Da Tabs in Vim kein Datei-Reiter-Ersatz sind, lohnen sie sich nur in bestimmten Situationen. Die wichtigsten:

Parallele, unabhängige Aufgaben in einer Vim-Session

Wer an einem Feature arbeitet, parallel aber einen Bug fixen muss, hat zwei voneinander unabhängige Workspaces. Ein Tab für jede Aufgabe — beide bleiben verfügbar, ohne sich gegenseitig im Layout zu stören.

Verschiedene Projekt-Bereiche mit eigenem Layout

Frontend, Backend und Doku eines Projekts erfordern oft sehr unterschiedliche Layouts. Frontend: zwei vertikale Splits (TSX und CSS). Backend: drei horizontale Splits (Code, Test, Log). Doku: ein einzelnes breites Fenster für Markdown. Pro Bereich ein Tab — und kein ständiges Umarbeiten des Layouts beim Kontextwechsel.

Diff-Ansichten ohne Layout-Verlust

:vert diffsplit other-file.txt zeigt zwei Dateien im Vergleich. In einem neuen Tab gestartet bleibt das eigentliche Arbeits-Layout unangetastet, der Diff ist eigenständig: :tabnew | vert diffsplit other.txt.

Long-running Outputs

Eine Log-Datei oder ein langes :terminal-Fenster (Vim 8+) eignet sich gut als eigener Tab: man wechselt ab und zu rein zum Schauen, der eigentliche Edit-Workspace bleibt unverändert.

Wann Tabs nicht sinnvoll sind

  • Eine Datei pro Tab: Nutze Buffer und <C-^> (siehe Buffer wechseln).
  • Mehrere Dateien parallel sichtbar: Nutze Splits (siehe Fenster und Splits).
  • Maximale visuelle Übersicht aller Dateien: Nutze eine vim-airline-Bufferline statt Tabs.

Häufige Stolperfallen

`:e neue-datei.txt` öffnet KEINEN neuen Tab

Wer aus IDE-Welt kommt, erwartet bei :e neue-datei.txt einen neuen Reiter. Tatsächlich ersetzt Vim den aktuellen Buffer im aktuellen Fenster. Der alte Buffer bleibt im Speicher (siehe Buffer-Konzept), aber Tab-Anzahl ändert sich nicht. Für einen Tab: :tabnew neue-datei.txt.

Tabs sind Workspace-Container, keine File-Reiter

Das ist die zentrale Verschiebung im Mental Model. Ein Vim-Tab kann beliebig viele Fenster und Buffer enthalten. Wer pro Datei einen Tab anlegt, nutzt Tabs falsch und wird sich später mit unübersichtlich vielen Workspaces wiederfinden.

Buffer leben über Tab-Grenzen hinweg

Wer in Tab 1 main.go öffnet und in Tab 2 erneut :b main.go aufruft, zeigt denselben Buffer in beiden Tabs. Änderungen synchronisieren sich automatisch — es ist eine Anzeige in zwei Layouts, kein Duplikat.

`gt` ist nicht `Ngt` mit Count 1

gt zykelt zum nächsten Tab. 1gt springt zum ersten Tab. Subtiler, aber wichtiger Unterschied — Counts vor gt ändern die Semantik von „nächster" zu „zum N-ten".

`:tabclose` schließt den Tab, NICHT die Buffer

Die Buffer aus einem geschlossenen Tab bleiben in der Buffer-Liste. Mit :b N oder :ls sind sie weiterhin erreichbar. Wer wirklich Buffer aufräumen will, nutzt :bd N oder das :%bd | e#-Idiom.

`tabline` braucht keine Plugin — aber Plugins helfen

Die Default-Tabline zeigt nur Datei-Namen — knapp, oft genug. Wer mehr will (Modus-Anzeige, Buffer-Liste, Git-Status), nutzt eine Statusline-Plugin-Erweiterung. vim-airline's tabline-Extension ist die häufigste Wahl.

Weiterführende Ressourcen

Externe Quellen

Verwandte Artikel

/ Weiter

Zurück zu Buffer, Fenster & Tabs

Zur Übersicht