Skip to Content
2025Vim Motions

Vim Motions in Visual Studio Code

Datum: April 2025
Lesedauer: 7 Minuten


Vim

Vim ist ein konfigurierbarer Texteditor. Anstatt auf Maus und Menüs zu setzen, arbeitet er mit Tastenkombinationen und Kommandos. Wer ihn beherrscht, bewegt sich mit beeindruckender Effizienz durch den Code.

Vim Motions

Die sogenannten Motions sind ein zentraler Grund für die Effizienz, die Vim auszeichnet. Sie ermöglichen schnelle, präzise Aktionen – und tragen damit nicht nur zur Geschwindigkeit, sondern auch zu einem spürbar besseren Flow beim Arbeiten bei. Letzteres ist vielen Entwickler:innen sogar wichtiger als reine Schnelligkeit.

Kein Umgreifen zur Maus, kein Suchen nach Menüs – man bleibt gedanklich ganz bei der Aufgabe. Die Finger verlassen kaum die Grundstellung auf der Tastatur. Das minimiert Kontextwechsel, reduziert unnötige Bewegungen, schont die Handgelenke und fördert einen durchgängigen Arbeitsrhythmus.

Doch dieser Effizienzgewinn hat seinen Preis: Die Lernkurve ist steil. Wer ernsthaft einsteigen will, muss bereit sein, Zeit in das Erlernen der Konzepte und die Konfiguration der Umgebung zu investieren. Beherrscht man die Motions aber erst einmal, verschmilzt Navigation mit Denken – und Editieren wird zu einer fast nahtlosen, intuitiven Tätigkeit.

VS Code Integration

Vim und Neovim mögen auf den ersten Blick wie Nischenlösungen wirken, sind aber unter Entwicklern hoch angesehen. Im Stack Overflow Developer Survey 2024  belegt Vim Platz 4 und Neovim Platz 6 unter den meistgenutzten Entwicklungsumgebungen. Mit 83 % Bewunderung ist Neovim der am höchsten bewertete Editor.
Gleichzeitig nutzen rund 59 % der Entwickler Visual Studio Code als eine ihrer Haupt-IDEs – mit deutlichem Vorsprung vor IntelliJ IDEA auf Platz 2.

Um vom Vim-Konzept zu profitieren, muss man nicht komplett auf Vim, Neovim oder Emacs umsteigen. Mit der Extension VSCodeVim  lassen sich die Vim-Motions direkt in Visual Studio Code integrieren. So bleibt der Komfort einer modernen IDE erhalten – während gleichzeitig die effiziente, tastaturbasierte Bedienung von Vim genutzt wird.

Basics

Vim funktioniert grundlegend anders als klassische Editoren. Statt durchgängig in einem Textbearbeitungsmodus zu arbeiten, nutzt Vim verschiedene Modi, die jeweils auf bestimmte Aufgaben ausgelegt sind:

ModusZweckVerhaltenEinstiegAusstieg
NormalNavigation & BefehleText wird nicht direkt bearbeitetStartmodusSiehe Einstieg anderer Modi
InsertText eingebenEingaben erscheinen im Dokumenti, a, oEsc
VisualText markierenAuswahl blockweise sichtbarv, V, Ctrl+vEsc
CommandEditor-Befehle ausführenBefehlszeile unten im Editor:Enter, Esc

Die meisten Aktionen in Vim folgen einem einfachen Muster:
[Operator][Count][Motion]

Beispiele:

  • d2w – löscht zwei Wörter (delete + count + motion)
  • y$ – kopiert bis zum Zeilenende (yank + motion)
  • c3j – ersetzt den Inhalt der nächsten drei Zeilen (change + motion)

Darüber hinaus erlaubt Vim Befehle, die sich auf bestimmte Strukturen im Text beziehen – etwa Anführungszeichen, Klammern oder HTML-Tags:

  • da" – löscht Anführungszeichen inklusive Inhalt (delete around quotes)
  • yy – kopiert die aktuelle Zeile (yank line)
  • cit – ersetzt den Inhalt innerhalb eines HTML-Tags (change inside tag)

Zur Navigation verwendet Vim die Tasten h, j, k, l, anstelle der Pfeiltasten:

  • j – nach unten
  • k – nach oben
  • h – nach links
  • l – nach rechts

Mit nur wenigen Kommandos lassen sich so bereits mächtige, kombinierbare Operationen ausführen – ohne die Hände je von der Tastatur zu nehmen.

CheatSheet

Die folgende Übersicht zeigt viele der Möglichkeiten auf:

cheatsheet
Quelle: https://thingsfittogether.com 

EasyMotion

Trotz aller Effizienz kann die Navigation in längeren Dateien mit Vim manchmal mühsam werden. Zwar kann man zu bestimmten Zeichen springen – allerdings nur innerhalb der aktuellen Zeile. Kommt das Zeichen mehrfach vor, ist der Treffer nicht immer direkt erreichbar.
Das Plugin EasyMotion löst dieses Problem: Es markiert alle möglichen Sprungziele visuell im Editor. Mit nur wenigen Tasten landet man direkt an der gewünschten Position.

easymotion

Konfiguration

Die folgenden Ausschnitte zeigen meine persönlichen Einstellungen.
Sie spiegeln meine individuellen Präferenzen wider und sind nicht als allgemeingültige Empfehlung, sondern als Inspiration zu verstehen.

Settings

In den Haupteinstellungen werden die Keybindings festgelegt – welche Tastenkombinationen welche Aktionen auslösen. Dies kann für jeden Modus separat erfolgen.
Nicht-rekursive Zuweisungen verhindert die Entstehung von Endlosschleifen.

settings.json
{ // insert mode "vim.insertModeKeyBindingsNonRecursive": [ // additional way to exit { "before": ["j", "j"], "after": ["<esc>"], "commands": ["workbench.action.files.save"] }, // save on exit { "before": ["<esc>"], "after": ["<esc>"], "commands": ["workbench.action.files.save"] } ], // normal mode "vim.normalModeKeyBindings": [ // vertical block jumping { "before": ["shift+j"], "after": ["}"] }, { "before": ["shift+k"], "after": ["{"] }, // easymotion end of word down and up { "before": ["space", "j"], "after": ["leader", "leader", "e"] }, { "before": ["space", "k"], "after": ["leader", "leader", "g", "e"] } ] }

Beim leader handelt es sich um eine benutzerdefinierte Taste, die als Präfix für Tastenkombinationen dient.

Profile

In den Einstellungen des Profils lässt sich sowohl das Verhalten als auch das Erscheinungsbild anpassen.
Besonders empfehlenswert sind die mit "editor.lineNumbers": "relative" aktivierten relativen Zeilennummern, welche schnelle Sprünge im Code ermöglichen.

profiles/settings.json
{ // visual "editor.lineNumbers": "relative", "vim.statusBarColorControl": true, "vim.statusBarColors.normal": ["#181818", "#fff"], // bg, text "vim.statusBarColors.insert": ["#000", "#808080"], "vim.statusBarColors.visual": ["#bbb2a2", "#282624"], "vim.statusBarColors.visualline": ["#ede2cf", "#282624"], "vim.statusBarColors.visualblock": ["#ede2cf", "#282624"], "vim.hlsearch": true, // highlight all text matching current search "vim.highlightedyank.enable": true, "vim.highlightedyank.color": "rgba(0, 0, 0, 0.5)", // copying/yanking "vim.useSystemClipboard": true, // system clipboard register (*) as default "vim.overrideCopy": false, // stays in current mode after copying // usabilty "vim.mouseSelectionGoesIntoVisualMode": false, // enables use of mouse in insert mode // easymotion "vim.easymotion": true, "vim.easymotionMarkerForegroundColorOneChar": "#eeff00", "vim.easymotionMarkerForegroundColorTwoCharFirst": "#eeff00", "vim.easymotionMarkerForegroundColorTwoCharSecond": "#eeff00", // performance "extensions.experimental.affinity": { "vscodevim.vim": 1 } }

Keybindings

Ich kann nur empfehlen, sich mit den verfügbaren Shortcuts vertraut zu machen und diese nach Bedarf anzupassen. Für viele Funktionen gibt es bereits vordefinierte Tastenkürzel, die jedoch manchmal mehr Bewegung erfordern und den Griff zur Maus notwendig machen. Durch eigene Anpassungen kann man diese Abhängigkeit weiter reduzieren und näher an der Homerow bleiben.
Um die Steuerung konsistent zu gestalten, verwende ich häufig die gleichen Tasten wie bei den Motions – z. B. h und l für links und rechts.

profile/keybindings.json
[ // tab navigation { "key": "cmd+h", "command": "workbench.action.previousEditor" }, { "key": "cmd+l", "command": "workbench.action.nextEditor" }, // split editor { "key": "cmd+7", "command": "workbench.action.splitEditor" }, // toggle between editor and explorer { "key": "cmd+m", "command": "workbench.action.focusFirstEditorGroup" }, { "key": "cmd+m", "when": "editorFocus", "command": "workbench.explorer.fileView.focus" }, // filesystem { "key": "n", "command": "explorer.newFile", "when": "filesExplorerFocus && !inputFocus" }, { "key": "r", "command": "renameFile", "when": "filesExplorerFocus && !inputFocus" }, { "key": "shift+n", "when": "explorerViewletFocus", "command": "explorer.newFolder" }, { "key": "d", "when": "filesExplorerFocus && !inputFocus", "command": "deleteFile" }, // VS Code/Vim multiline fix { "key": "cmd+alt+up", "command": "-extension.vim_cmd+alt+up", "when": "editorTextFocus && vim.active && !inDebugRepl" }, { "key": "cmd+alt+down", "command": "-extension.vim_cmd+alt+down", "when": "editorTextFocus && vim.active && !inDebugRepl" } ]

Für eine reibungslose Bedienung empfehle ich, sich bewusst zu entscheiden, welche Funktionen von Vim und welche von VS Code man nutzen möchte, um die beiden nicht unnötig zu mischen.

Ich schätze bestimmte Features von VS Code, wie die erweiterte Suchfunktion und das Multiline-Editing (z. B. ⌘ ⇧ L), die mir eine schnellere und angenehmere Benutzererfahrung bieten, als sie in Vim möglich wäre. Auch das Öffnen, Speichern und Schliessen von Dateien erledige ich bevorzugt mit den eingebauten VS Code-Shortcuts, da sie mir bereits vertraut sind. Den Command Mode von Vim nutze ich daher nur selten. Aus diesem Grund habe ich auch eine Einstellungen vorgenommen, um das Multiline-Editing zu erhalten.

System

Die Caps-Lock-Taste habe ich auf Escape gemappt, um aus allen Modi wieder schneller und angenehmer in den Normal Mode wechseln zu können.

Mehr

Weitere Einstellungsmöglichkeiten der VSCodeVim Extension sind im entsprechenden Readme aufgelistet:
https://github.com/VSCodeVim/Vim 

Lernressourcen

Das Erlernen der Motions erfordert Geduld. Man muss die Motions lesen, üben und selbst anwenden. Mir haben zwei Ressourcen besonders geholfen:

RessourceLinkBeschreibung
Learn Vim Extensionhttps://marketplace.visualstudio.com/items?itemName=vintharas.learn-vim VS Code-Erweiterung mit strukturierten Lektionen, die alle wichtigen Grundlagen mit verständlichen Erklärungen und guten Beispielen abdecken.
Vim Herohttps://www.vim-hero.com Prägnante Erklärungen und spielerischer Übungen – ideal zur Verbesserung von Geschwindigkeit und Präzision.

Persönliche Erfahrung

Nach rund einem Monat mit VSCodeVim blicke ich auf verschiedene Phasen zurück.

1 - Aha-Moment

Die ersten Stunden waren beeindruckend - Kontrolle über den Cursor, ohne Maus. Mir wurde klar, welches Potenzial in den Motions steckt. Es gab viel zu lernen.

2 - settings.json

VSCodeVim funktioniert zwar direkt nach der Installation. Rund wird das Erlebnis aber erst mit gezielten Einstellungen. Nach den ersten Basics habe ich viel Zeit in die Konfiguration investiert, um die Umgebung meiner Arbeitsweise anzupassen.

3 - Frontend?

Als Frontend-Entwickler hatte ich zwischenzeitlich Zweifel, ob Vim wirklich das richtige Werkzeug ist. Der häufige Wechsel in den Browser, das Untersuchen von Elementen und das Scrollen führt einen oft zurück zum Trackpad.

4 - Keyboard

Mittlerweile nutze ich das Trackpad deutlich seltener. Mit AeroSpace  als Window-Manager und konsequenten Shortcuts navigiere ich effizient durch meine Umgebungen.
Ganz verzichten will ich jedoch noch nicht auf das Trackpad. Beim Scrollen oder schnellen Navigieren im Insert Mode bleibt es praktischer. Gerade als Frontend-Entwickler, der häufig zwischen Editor und Browser wechselt, ist dieser Mix für mich derzeit am besten.
Noch läuft nicht alles glatt, aber ich arbeite effizienter, weil ich mich mit meinem Setup auseinandergesetzt habe und es gezielt nutze.

Fazit

Ich werde die Motions definitiv weiter nutzen. Sie machen das Editieren nicht nur effizienter, sondern auch angenehmer. Ob sie langfristig mein primäres Interface bleiben, wird sich zeigen. Doch der Weg dorthin ist spannend, und die Fortschritte wirken motivierend.