Zum Inhalt springen

Vim für widerwillige Entwickler: praktische Gewinne

Die praktischen Vim-Bewegungen und Workflows, die das tägliche Programmieren wirklich beschleunigen — ohne Ideologie, nur konkrete Effizienz.

4 Min. Lesezeit
Code-Editor mit Vim-Tastenkürzel-Overlay, das gängige Bewegungen zeigt

Die Vim-Debatte ist ermüdend. Die eine Seite besteht darauf, dass es das einzig ernstzunehmende Werkzeug für ernsthafte Entwickler sei. Die andere Seite beendet sie, indem sie :q! tippt und nie zurückkehrt. Beide verfehlen den Punkt. Bei Vim geht es nicht um Ideologie, sondern um eine komponierbare Editiersprache, die dir, einmal verinnerlicht, erlaubt, Code schneller zu bearbeiten als jeder mausgesteuerte Workflow.

Du musst nicht den Editor wechseln. VS Code mit Vim-Tastenkürzeln, JetBrains IdeaVim und Neovim bieten dir alle dasselbe Editiermodell, ohne moderne IDE-Funktionen aufzugeben. Die Investition zahlt sich innerhalb weniger Wochen aus.

Die Grammatik von Vim

Die Stärke von Vim liegt in seiner komponierbaren Befehlsstruktur: Verb + Modifikator + Nomen. Sobald du das Vokabular beherrschst, kannst du jede Editieroperation zusammensetzen, ohne einzelne Tastenkombinationen auswendig zu lernen.

shbash
# The formula: [count] verb [modifier] noun
 
# Verbs (operators)
d  → delete
c  → change (delete + enter insert mode)
y  → yank (copy)
v  → visual select
 
# Nouns (motions/text objects)
w  → word
b  → back a word
$  → end of line
0  → start of line
gg → start of file
G  → end of file
 
# Modifiers
i  → inner (inside delimiters)
a  → around (including delimiters)

Diese Grammatik lässt sich unendlich kombinieren:

shbash
# Operations that read like English
dw    → delete word
d$    → delete to end of line
ciw   → change inner word
ci"   → change inner quotes (delete contents between " ")
da(   → delete around parentheses (including the parens)
yap   → yank around paragraph
di{   → delete inner braces (contents between { })
ct.   → change to next period

Wenn du d, c, y, v als Verben und w, b, $, i", a{ als Nomen lernst, erhältst du aus einer Handvoll Grundbausteinen Dutzende Operationen.

Die wichtigsten Bewegungen

Nicht alle Vim-Bewegungen sind gleich nützlich. Diese zehn decken 80 % der täglichen Editierarbeit ab:

shbash
# Essential movement
w / b     → forward/back by word
f{char}   → jump to next {char} on current line
/{pattern} → search forward
*         → search for word under cursor
%         → jump to matching bracket
 
# Essential editing
ciw       → change inner word (replace a word)
ci"       → change inner quotes
dd        → delete entire line
o / O     → insert line below / above
.         → repeat last change

Der Befehl . ist Vims größte Stärke. Er wiederholt deine letzte Editieraktion. Kombiniere ihn mit der Suche / und n (nächster Treffer) für ein manuelles Suchen-und-Ersetzen, bei dem du jedes einzelne Vorkommen selbst kontrollierst:

shbash
# Find-and-change workflow
/oldVariable    → search for the text
ciw             → change inner word
newVariable     → type replacement
<Esc>           → back to normal mode
n               → jump to next occurrence
.               → repeat the ciw + replacement
n               → next occurrence
.               → repeat again

Das ist bei einer kleinen Anzahl von Ersetzungen schneller als :%s/old/new/gc, weil du jede Änderung im Kontext siehst.

Textobjekte: das Killer-Feature

Textobjekte (der Modifikator i für innen und der Modifikator a für umgebend) wirken auf strukturierte Code-Einheiten – den Inhalt zwischen Anführungszeichen, Klammern, Tags oder Absätzen. Sie machen manuelles Markieren komplett überflüssig.

tstypescript
// Cursor is anywhere inside the string
const message = "Hello, world!";
//               ^ cursor here
// ci"    → deletes "Hello, world!" and puts you in insert mode
// Result: const message = "|" (cursor between quotes)
 
// Cursor is on the function arguments
function calculate(price, quantity, tax) {
//                  ^ cursor here
// di(    → deletes everything inside parentheses
// Result: function calculate() {}
 
// Cursor is inside the object
const config = { host: "localhost", port: 3000 };
//                ^ cursor here
// da{    → deletes the entire object including braces
// Result: const config = ;
tstypescript
// HTML/JSX text objects (with appropriate plugin)
<div className="container">
  <p>Some content here</p>
</div>
// With cursor inside the div:
// dit   → delete inner tag (everything between <div> and </div>)
// dat   → delete around tag (including the opening and closing tags)

Makros für wiederkehrende Änderungen

Makros zeichnen eine Folge von Tastenanschlägen auf und spielen sie erneut ab. Bei repetitiven strukturellen Änderungen über viele Zeilen hinweg sind Makros um eine Größenordnung schneller als manuelles Editieren.

shbash
# Scenario: Convert 50 lines of
#   const x = require('x');
# to
#   import x from 'x';
 
# Record macro into register q
qq                  → start recording into register q
0                   → go to start of line
cwimport<Esc>       → change 'const' to 'import'
f=                  → jump to '='
C from<Esc>         → change from '=' to end of line to ' from'
A;<Esc>             → append semicolon (if needed)
$x                  → delete trailing character
J                   → join any broken lines
q                   → stop recording
 
# Replay: apply to next 49 lines
49@q                → execute macro 49 times

Der entscheidende Trick: das Makro so gestalten, dass der Cursor am Ende auf der nächsten zu bearbeitenden Zeile steht. Dann verkettet 49@q sie automatisch.

Register und Zwischenablage

Vim hat 26 benannte Register (a-z) plus einige Sonderregister. Das löst das Problem "Ich will etwas einfügen, aber Kopieren überschreibt meine Zwischenablage".

shbash
# Named registers
"ayy     → yank line into register a
"bdd     → delete line into register b
"ap      → paste from register a
"bp      → paste from register b
 
# Special registers
""       → default register (last yank/delete)
"0       → last yank (NOT affected by delete)
"+       → system clipboard
"_       → black hole register (delete without storing)
shbash
# Common workflow: delete lines without losing your clipboard
# 1. Yank the text you want to paste: yiw
# 2. Delete the text you want to replace: "_diw (into black hole)
# 3. Paste: p
 
# Or use the yank register:
# 1. Yank: yiw
# 2. Delete target: diw (this overwrites "" but not "0)
# 3. Paste from yank register: "0p

Praktisches VS-Code-Setup mit Vim

Die meisten Entwickler erzielen mit VS Code plus der Vim-Erweiterung die besten Ergebnisse – sie behalten die IDE-Funktionen und bekommen zusätzlich das Editiermodell.

jsonjson
// settings.json — practical Vim configuration for VS Code
{
  "vim.useSystemClipboard": true,
  "vim.hlsearch": true,
  "vim.leader": "<space>",
  "vim.handleKeys": {
    "<C-d>": true,
    "<C-u>": true,
    "<C-f>": false,
    "<C-b>": false,
    "<C-p>": false,
    "<C-w>": false
  },
  "vim.normalModeKeyBindingsNonRecursive": [
    { "before": ["<leader>", "w"], "commands": ["workbench.action.files.save"] },
    { "before": ["<leader>", "f"], "commands": ["workbench.action.quickOpen"] },
    { "before": ["<leader>", "p"], "commands": ["editor.action.formatDocument"] },
    { "before": ["g", "d"], "commands": ["editor.action.revealDefinition"] },
    { "before": ["g", "r"], "commands": ["editor.action.goToReferences"] }
  ]
}

Der Abschnitt handleKeys ist entscheidend – er sorgt dafür, dass Ctrl+F, Ctrl+P und Ctrl+W das native Verhalten von VS Code behalten, während Vim sich um alles andere kümmert. So vermeidest du die lästige Phase, in der Vim Tastenkombinationen überschreibt, auf die du angewiesen bist.

Strategie für die Lernkurve

Versuch nicht, alles auf einmal zu lernen. Nimm dir jede Woche eine neue Bewegung vor:

shbash
# Week 1: hjkl, i, <Esc>, :w, :q, dd, yy, p
# Week 2: w, b, 0, $, ciw, diw
# Week 3: f{char}, /{pattern}, n, N, .
# Week 4: ci", ci(, da{, visual mode (v, V)
# Week 5: macros (qq, q, @q)
# Week 6: registers ("a, "+, "0)

Die erste Woche ist schmerzhaft. In Woche drei laufen die grundlegenden Bewegungen schon automatisch ab. In Woche sechs bist du bei den meisten Editieraufgaben schneller als mit deinem alten Workflow. Diese Investition zahlt sich dauerhaft aus – Vim-Bewegungen funktionieren in praktisch jedem Editor und den meisten Terminal-Tools.

Die wichtigsten Erkenntnisse

  1. Lerne die Grammatik, nicht einzelne Tastenkombinationen — Verb + Modifikator + Nomen ergeben unendlich viele Operationen
  2. Textobjekte bringen den größten Produktivitätsgewinn — ci", da{, diw machen manuelles Markieren überflüssig
  3. Der Befehl . ist das beste Feature — wiederholt deine letzte Änderung mit einem einzigen Tastendruck
  4. Nutze VS Code + Vim statt reinem Vim — das Editiermodell, ohne die IDE-Funktionen zu verlieren
  5. Lerne eine Bewegung pro Woche — langsamer Einstieg baut dauerhaftes Muskelgedächtnis auf
  6. Makros erledigen Massenedits — einmal aufnehmen, hunderte Male abspielen
Wilfredo Rujel

Wilfredo Rujel

Full-Stack-Softwareentwickler

Diesen Beitrag teilenX