[{"data":1,"prerenderedAt":489},["ShallowReactive",2],{"\u002Fblog\u002F2026-08-31-my-current-vim-workflow":3},{"id":4,"title":5,"body":6,"category":470,"coverImage":471,"date":472,"description":473,"extension":474,"meta":475,"navigation":476,"path":477,"seo":478,"status":479,"stem":480,"tags":481,"__hash__":488},"blog\u002Fblog\u002F2026-08-31-my-current-vim-workflow.md","Meine Vim-Kenntnisse nach einem Jahr",{"type":7,"value":8,"toc":459},"minimark",[9,18,21,24,29,52,62,71,88,96,105,109,136,153,182,193,197,211,235,249,264,268,275,293,296,300,317,331,359,370,374,383,391,394,403,407,410,439,446,456],[10,11,12,13,17],"p",{},"Seit ungefähr einem Jahr beschäftige ich mich nun mit Vim. Angefangen hat\nalles mit einer internen Linux-Schulung und dem Vorsatz, dem etwas\neigenwilligen Texteditor zumindest einen Monat lang eine ehrliche Chance zu\ngeben. Aus dem Monat ist mittlerweile ein Jahr geworden. In dieser Zeit habe\nich ",[14,15,16],"em",{},"Learning the vi and Vim Editors"," von Arnold Robbins und Elbert Hannah\ngelesen, zahlreiche Videos zu Vim und Neovim geschaut und vor allem viel\nausprobiert.",[10,19,20],{},"Dieser Artikel soll weder ein Vim-Tutorial noch eine vollständige Auflistung\naller Funktionen werden. Dafür gibt es das Benutzerhandbuch – und Menschen,\ndie Vim bereits seit mehreren Jahrzehnten verwenden. Ich möchte stattdessen\nfesthalten, wie ich Vim nach meinem ersten Jahr tatsächlich nutze: Welche\nBefehle sind bereits ins Muskelgedächtnis übergegangen? Welche Konzepte finde\nich besonders nützlich? Und von welchen Funktionen weiß ich zwar, denke im\nentscheidenden Moment aber trotzdem nicht daran?",[10,22,23],{},"Der Text ist damit vor allem eine Momentaufnahme. Vermutlich werde ich einige\nder folgenden Gewohnheiten in ein paar Jahren umständlich oder sogar ziemlich\nunsinnig finden. Genau deshalb möchte ich sie aufschreiben.",[25,26,28],"h2",{"id":27},"vom-file-tree-zur-direkten-suche","Vom File Tree zur direkten Suche",[10,30,31,32,40,41,45,46,48,49,51],{},"Beginnen wir mit der Navigation zwischen Dateien. Aktuell arbeite ich noch\nrecht häufig mit einem klassischen File Tree. Dafür nutze ich\n",[33,34,39],"a",{":target":35,"href":36,"rel":37},"_blank","https:\u002F\u002Fvimdoc.sourceforge.net\u002Fhtmldoc\u002Fpi_netrw.html",[38],"nofollow","netrw",",\nden eingebauten, vielleicht etwas angestaubten Dateiexplorer von Vim. Mit der\nTaste ",[42,43,44],"code",{},"-"," öffne ich das Verzeichnis der aktuellen Datei und kann mich von dort\ndurch das Projekt bewegen. ",[42,47,44],{}," fühlt sich für mich am intuitivsten an, weil die\nStandard-Taste, mit der man in netrw eine Ebene nach oben springt, ebenfalls\n",[42,50,44],{}," ist.",[53,54,55],"figure",{},[10,56,57],{},[58,59],"img",{"alt":60,"src":61,"title":60},"netrw in Action","\u002Fimg\u002Fblog\u002Fneovim-netrw.jpg",[10,63,64,65,70],{},"Für meinen Bedarf ist netrw vollkommen ausreichend. Natürlich gibt es\ninteressante Alternativen wie\n",[33,66,69],{":target":35,"href":67,"rel":68},"https:\u002F\u002Fgithub.com\u002Fstevearc\u002Foil.nvim",[38],"oil.nvim",", mit denen\nman ein Verzeichnis wie einen normalen Buffer bearbeiten kann. Dateien lassen\nsich dann ähnlich verschieben, umbenennen oder löschen wie gewöhnlicher Text.\nDas finde ich durchaus spannend. Trotzdem versuche ich bei grundlegenden\nFunktionen möglichst nah am Standard zu bleiben. In meinem Arbeitsalltag\nhantiere ich regelmäßig auf Servern, auf denen nur Vim oder teilweise sogar\nnur vi installiert ist. Dort stehen mir keinerlei Plugins zur Verfügung.",[10,72,73,74,79,80,83,84,87],{},"Gleichzeitig versuche ich, den File Tree immer seltener zu verwenden. In einem\nbekannten Projekt weiß ich meist schon ungefähr, welche Datei ich suche. Dann\nist es schneller, den Namen direkt über\n",[33,75,78],{":target":35,"href":76,"rel":77},"https:\u002F\u002Fgithub.com\u002Fnvim-telescope\u002Ftelescope.nvim",[38],"Telescope","\neinzugeben, anstatt mich durch mehrere Verzeichnisse zu klicken. Mit\n",[42,81,82],{},"find_files"," suche ich nach Dateien, mit ",[42,85,86],{},"live_grep"," nach Text im gesamten\nProjekt. Beides verwende ich täglich, obwohl es vermutlich nur einen kleinen\nTeil dessen abdeckt, was Telescope eigentlich kann.",[53,89,90],{},[10,91,92],{},[58,93],{"alt":94,"src":95,"title":94},"Telescope in Action","\u002Fimg\u002Fblog\u002Fneovim-telescope.jpg",[10,97,98,99,104],{},"Den File Tree nutze ich deshalb vor allem dann, wenn ich einen unbekannten\nBereich des Projekts erkunden und dessen Struktur verstehen möchte. Für alles,\nwas ich bereits kenne, greife ich zunehmend zur Suche. Die wenigen Dateien,\nzwischen denen ich während einer Aufgabe ständig hin- und herspringe, lege ich\nzusätzlich in ",[33,100,103],{":target":35,"href":101,"rel":102},"https:\u002F\u002Fgithub.com\u002FThePrimeagen\u002Fharpoon",[38],"Harpoon","\nab. So hat mittlerweile jedes Werkzeug eine recht klare Aufgabe: netrw zum\nErkunden, Telescope zum Finden und Harpoon zum schnellen Wechseln.",[25,106,108],{"id":107},"wie-ich-mich-innerhalb-einer-datei-bewege","Wie ich mich innerhalb einer Datei bewege",[10,110,111,112,115,116,115,119,122,123,126,127,122,129,131,132,135],{},"Bei Vim denkt man vermutlich zuerst an ",[42,113,114],{},"h",", ",[42,117,118],{},"j",[42,120,121],{},"k"," und ",[42,124,125],{},"l",". Tatsächlich\nverwende ich zumindest ",[42,128,118],{},[42,130,121],{}," weiterhin häufig, oft zusammen mit einem\nCount. Wenn das Ziel zehn Zeilen weiter unten liegt, tippe ich ",[42,133,134],{},"10j",", anstatt\nzehnmal dieselbe Taste zu drücken. Relative Zeilennummern sind dafür aus\nmeiner Sicht unverzichtbar. Ohne sie müsste ich den Abstand entweder selbst\nzählen oder im Kopf subtrahieren – beides möchte ich beim Programmieren eher\nnicht tun.",[10,137,138,139,122,142,145,146,122,149,152],{},"Noch häufiger nutze ich allerdings ",[42,140,141],{},"Ctrl-d",[42,143,144],{},"Ctrl-u",", um jeweils eine\nhalbe Bildschirmseite nach unten oder oben zu springen. Für den Anfang und\ndas Ende einer Datei sind ",[42,147,148],{},"gg",[42,150,151],{},"G"," inzwischen ebenfalls vollständig ins\nMuskelgedächtnis übergegangen.",[10,154,155,156,159,160,163,164,167,168,171,172,174,175,122,178,181],{},"Wenn das Ziel nicht sichtbar ist, suche ich meistens mit ",[42,157,158],{},"\u002F",". Selbst bei\nvergleichsweise kurzen Distanzen ist das für mich oft schneller, als mich mit\nmehreren Bewegungsbefehlen dorthin vorzuarbeiten. ",[42,161,162],{},"f"," verwende ich ebenfalls,\nallerdings deutlich seltener. Interessanterweise muss ich bei den jeweiligen\nWiederholungsbefehlen manchmal noch kurz überlegen: War es jetzt ",[42,165,166],{},"n"," für den\nnächsten Suchtreffer oder ",[42,169,170],{},";"," für die nächste Fundstelle von ",[42,173,162],{},"? Die\nrückwärts gerichteten Varianten ",[42,176,177],{},"?",[42,179,180],{},"F"," verwende ich so gut wie nie.\nOffenbar ist es für mich einfacher, ein paar Zeichen zu weit zu springen und\ndann zurückzugehen, als von Anfang an in die andere Richtung zu suchen.",[10,183,184,185,188,189,192],{},"Marks sind ein weiteres Konzept, das ich theoretisch nützlich finde. Mit ",[42,186,187],{},"ma","\nlässt sich eine Position markieren, mit ",[42,190,191],{},"`a"," kann man später exakt dorthin\nzurückspringen. In der Praxis denke ich nur selten daran. Ähnlich geht es mir\nmit der Jump List.",[25,194,196],{"id":195},"wie-ich-text-bearbeite","Wie ich Text bearbeite",[10,198,199,200,115,203,206,207,210],{},"Der Moment, in dem Vim für mich wirklich Sinn ergab, hatte weniger mit der\nNavigation als mit Text Objects zu tun. Kombinationen wie ",[42,201,202],{},"ciw",[42,204,205],{},"ci\""," oder\n",[42,208,209],{},"ci("," gehören mittlerweile zu meinen meistgenutzten Befehlen. Ich muss nicht\nerst ein Wort oder den Inhalt einer Klammer markieren und danach löschen.\nStattdessen beschreibe ich direkt, was ich ändern möchte.",[10,212,213,214,217,218,115,221,224,225,122,228,224,231,234],{},"Genau darin liegt für mich weiterhin die größte Stärke von Vim. Die einzelnen\nBefehle lassen sich wie Bestandteile einer Sprache kombinieren. ",[42,215,216],{},"c"," steht für\n",[14,219,220],{},"change",[42,222,223],{},"i"," für ",[14,226,227],{},"inside",[42,229,230],{},"w",[14,232,233],{},"word",". Aus drei kleinen Bausteinen\nwird „ändere den Inhalt dieses Wortes“. Dasselbe Prinzip funktioniert mit\nAnführungszeichen, Klammern, Absätzen und zahlreichen anderen Textbereichen.\nIrgendwann hört man auf, die einzelnen Buchstaben bewusst zu übersetzen.",[10,236,237,238,241,242,245,246,248],{},"Daneben besteht mein Alltag aus ziemlich unspektakulären Befehlen: ",[42,239,240],{},"yy"," zum\nKopieren einer Zeile, ",[42,243,244],{},"dd"," zum Löschen und ",[42,247,10],{}," zum Einfügen. Gerade diese\neinfachen Kombinationen zeigen aber gut, warum sich Vim nach einiger Zeit so\nflüssig anfühlt. Für viele kleine Änderungen muss ich weder etwas markieren\nnoch die Hände von ihrer normalen Position auf der Tastatur wegbewegen.",[10,250,251,252,255,256,259,260,263],{},"Eine Funktion, die ich erst kürzlich gelernt habe, ist ",[42,253,254],{},"gq",". Damit lässt sich\nText neu formatieren und entsprechend der eingestellten Textbreite umbrechen.\nBei Markdown-Dateien verwende ich beispielsweise ",[42,257,258],{},"gqap",": ",[14,261,262],{},"gq around paragraph",",\nsprich den aktuellen Absatz formatieren.",[25,265,267],{"id":266},"der-unterschätzte-punkt","Der unterschätzte Punkt",[10,269,270,271,274],{},"Einer meiner liebsten Vim-Befehle ist der Punkt ",[42,272,273],{},".",". Er wiederholt die letzte\nÄnderung. Das klingt zunächst nicht besonders spektakulär, lässt sich aber mit\nfast allem kombinieren.",[10,276,277,278,280,281,283,284,286,287,289,290,292],{},"Möchte ich beispielsweise dasselbe Wort an mehreren Stellen ändern, suche ich\nnach dem ersten Vorkommen, ändere es mit ",[42,279,202],{},", springe mit ",[42,282,166],{}," zum nächsten\nTreffer und wiederhole die Änderung mit ",[42,285,273],{},". Danach wechseln sich nur noch ",[42,288,166],{},"\nund ",[42,291,273],{}," ab. Ich verwende den Punkt bereits regelmäßig und habe trotzdem das\nGefühl, sein Potenzial noch nicht vollständig auszunutzen. Häufig bemerke ich\nerst im Nachhinein, dass ich eine Änderung so wesentlich einfacher hätte\nwiederholen können.",[10,294,295],{},"Macros verfolgen eine ähnliche Idee, gehen aber noch einen Schritt weiter.\nEine ganze Folge von Befehlen lässt sich aufzeichnen und anschließend beliebig\noft abspielen. Wenn ich ein passendes Problem erkenne, sind Macros äußerst\npraktisch. Das Erkennen ist allerdings der schwierige Teil. Meist beginne ich\neine Änderung von Hand und stelle erst beim fünften Durchlauf fest, dass ein\nMacro sinnvoll gewesen wäre.",[25,297,299],{"id":298},"vim-und-die-kommandozeile","Vim und die Kommandozeile",[10,301,302,303,305,306,115,309,312,313,316],{},"Ein größerer Teil von ",[14,304,16],{}," beschäftigt sich mit\ndem Ex-Editor, der noch immer unter der Oberfläche von Vim steckt. Vor dem\nBuch war die kleine Kommandozeile, die nach einem Doppelpunkt erscheint, für\nmich hauptsächlich der Ort für ",[42,307,308],{},":w",[42,310,311],{},":q"," und gelegentlich ",[42,314,315],{},":split",". Inzwischen\nverstehe ich deutlich besser, wie Bereiche, Befehle und reguläre Ausdrücke\ndort zusammenspielen.",[10,318,319,320,323,324,326,327,330],{},"Besonders häufig nutze ich Suchen und Ersetzen. Mit ",[42,321,322],{},":%s\u002Fsearch\u002Freplace\u002Fgc","\ngehe ich durch alle Treffer einer Datei und bestätige jede Ersetzung einzeln.\nDas ",[42,325,216],{}," am Ende ist für mich wichtig, weil ich so nicht blind jede Fundstelle\nverändere. Gleichzeitig hat mich die Verwendung von ",[42,328,329],{},":s"," endlich dazu\ngezwungen, reguläre Ausdrücke vernünftig zu lernen, anstatt deren Syntax jedes\nMal neu nachzuschlagen.",[10,332,333,334,337,338,341,342,345,346,349,350,115,352,355,356,273],{},"Noch interessanter finde ich die Verbindung zur Linux-Kommandozeile. Mit ",[42,335,336],{},":!","\nkann Vim praktisch jedes verfügbare Kommando ausführen. Ein markierter Bereich\nlässt sich mit ",[42,339,340],{},"!sort"," direkt durch ",[42,343,344],{},"sort"," schicken; die Ausgabe ersetzt\nanschließend den ursprünglichen Text. Mit ",[42,347,348],{},":r !command"," landet die Ausgabe\neines Befehls direkt in der aktuellen Datei. Dadurch stehen nicht nur die\nFunktionen des Editors zur Verfügung, sondern auch Werkzeuge wie ",[42,351,344],{},[42,353,354],{},"jq","\noder ",[42,357,358],{},"column",[10,360,361,362,365,366,369],{},"Wenn ich die Shell doch einmal direkt benötige, lege ich Neovim mit ",[42,363,364],{},"Ctrl-z","\nin den Hintergrund. Nach dem Shell-Befehl bringt mich ",[42,367,368],{},"fg"," zurück in den\nEditor. Diese enge Verbindung zwischen Editor und Kommandozeile ist eine der\nEigenschaften, die ich an Vim besonders mag. Viele grafische Editoren können\nexterne Programme natürlich ebenfalls ausführen. In Vim fühlt es sich jedoch\nwie ein natürlicher Bestandteil des Editors an und nicht wie eine nachträglich\nangebaute Funktion.",[25,371,373],{"id":372},"mein-aktueller-werkzeugkasten","Mein aktueller Werkzeugkasten",[10,375,376,377,382],{},"Neovim selbst bildet nur die Grundlage meines Setups. Einige Plugins möchte\nich inzwischen nicht mehr missen. Telescope, Harpoon und netrw habe ich\nbereits erwähnt. Für die Arbeit mit Git verwende ich täglich\n",[33,378,381],{":target":35,"href":379,"rel":380},"https:\u002F\u002Fgithub.com\u002Fjesseduffield\u002Flazygit",[38],"Lazygit",", das ich\ndirekt aus Neovim heraus öffne.",[53,384,385],{},[10,386,387],{},[58,388],{"alt":389,"src":390,"title":389},"Lazygit in Action","\u002Fimg\u002Fblog\u002Fneovim-lazygit.jpg",[10,392,393],{},"Lazygit nimmt mir viele wiederkehrende Git-Befehle ab, ohne vollständig zu\nverbergen, was im Hintergrund passiert. Jede Aktion wird in einen normalen\nGit-Befehl übersetzt und im Command Log angezeigt. Dadurch kann ich bequem\narbeiten und lerne nebenbei weiterhin etwas über Git. Diese Kombination\ngefällt mir deutlich besser als grafische Oberflächen, bei denen kaum\nnachvollziehbar ist, welcher Befehl gerade ausgeführt wurde.",[10,395,396,397,402],{},"Daneben kümmert sich mein Setup um LSP, Autovervollständigung, Formatierung,\nLinting und Debugging. Meine vollständige Konfiguration liegt öffentlich in\nmeinen\n",[33,398,401],{":target":35,"href":399,"rel":400},"https:\u002F\u002Fgithub.com\u002FFabinatix97\u002Fdotfiles\u002Ftree\u002Fmain\u002Fnvim\u002F.config\u002Fnvim",[38],"Dotfiles",".\nSie verändert sich weiterhin regelmäßig. Gerade das ist einer der Gründe,\nweshalb ich meine Lua-Kenntnisse ausbauen möchte: Ich will die Konfiguration\nnicht nur aus Beispielen zusammensetzen, sondern besser verstehen und gezielter\nan meinen Workflow anpassen können.",[25,404,406],{"id":405},"was-ich-kenne-aber-kaum-verwende","Was ich kenne, aber kaum verwende",[10,408,409],{},"Ein Jahr mit Vim reicht problemlos aus, um mehr Funktionen kennenzulernen, als\nman anschließend tatsächlich benutzt. Neben Marks und Macros betrifft das bei\nmir vor allem Registers außerhalb der System-Zwischenablage. Ich weiß, dass ich\ngelöschten oder kopierten Text gezielt in verschiedenen Registern ablegen und\nspäter wieder abrufen kann. In der Praxis verwende ich meistens trotzdem den\neinfachsten Weg.",[10,411,412,413,115,416,122,419,422,423,426,427,430,431,434,435,438],{},"Auch Folds mit ",[42,414,415],{},"zf",[42,417,418],{},"zo",[42,420,421],{},"zc"," habe ich ausprobiert, aber noch nicht in\nmeinen Alltag integriert. Dasselbe gilt für die eingebaute\nInsert-Mode-Completion über ",[42,424,425],{},"Ctrl-x",", Abbreviations mit ",[42,428,429],{},":ab",", die\nRechtschreibprüfung über ",[42,432,433],{},":setlocal spell"," und die Command-History mit\n",[42,436,437],{},"Ctrl-f",". All diese Funktionen sind nützlich. Bisher sind die Situationen, in\ndenen ich an sie denke, allerdings seltener als die Situationen, in denen ich\nsie gebrauchen könnte.",[10,440,441,442,445],{},"Außerdem begegnet mir in Videos regelmäßig ",[42,443,444],{},":norm",". Damit lässt sich ein\nNormal-Mode-Befehl auf einen ganzen Zeilenbereich anwenden. Das klingt genau\nnach einer Funktion, die ich sehr nützlich finden werde, sobald ich mich\nendlich ernsthaft damit beschäftige. Ähnlich sieht es mit dem gezielten\nVerschieben und Skalieren von Splits aus: Ich weiß, dass es geht, greife aber\nnoch nicht selbstverständlich zu den passenden Befehlen.",[10,447,448,449,451,452,455],{},"In einem Jahr kann ich diesen Artikel erneut lesen und prüfen, was davon\ninzwischen sitzt. Vielleicht verwende ich dann Marks täglich, erledige\nÄnderungen mit ",[42,450,444],{},", die ich heute noch einzeln vornehme, und schüttele über\n",[42,453,454],{},"0i"," den Kopf. Vielleicht hat sich auch kaum etwas verändert und ich arbeite\nweiterhin mit denselben zwanzig Befehlen.",[10,457,458],{},"Beides wäre in Ordnung. Vim zu lernen bedeutet für mich nicht, irgendwann\njeden Befehl auswendig zu kennen. Es bedeutet, den eigenen Werkzeugkasten nach\nund nach zu erweitern – und gelegentlich festzustellen, dass eine Funktion,\ndie man seit Monaten kennt, plötzlich im Muskelgedächtnis angekommen ist.",{"title":460,"searchDepth":461,"depth":461,"links":462},"",2,[463,464,465,466,467,468,469],{"id":27,"depth":461,"text":28},{"id":107,"depth":461,"text":108},{"id":195,"depth":461,"text":196},{"id":266,"depth":461,"text":267},{"id":298,"depth":461,"text":299},{"id":372,"depth":461,"text":373},{"id":405,"depth":461,"text":406},"Essay","\u002Fimg\u002Fblog\u002Fneovim-home.jpg","2026-08-31","Seit ungefähr einem Jahr beschäftige ich mich nun mit Vim. Angefangen hat\nalles mit einer internen Linux-Schulung und dem Vorsatz, dem etwas\neigenwilligen Texteditor zumindest einen Monat lang eine ehrliche Chance zu\ngeben. Aus dem Monat ist mittlerweile ein Jahr geworden. In dieser Zeit habe\nich Learning the vi and Vim Editors von Arnold Robbins und Elbert Hannah\ngelesen, zahlreiche Videos zu Vim und Neovim geschaut und vor allem viel\nausprobiert.","md",{},true,"\u002Fblog\u002F2026-08-31-my-current-vim-workflow",{"title":5,"description":473},"published","blog\u002F2026-08-31-my-current-vim-workflow",[482,483,484,485,486,487],"vim","neovim","software","produktivitaet","tools","mastery","-cjY5FEkzTPnbSOAQtNSIR2Cv6qlKYnbiq_s1F_Y8Ow",1788241240285]