Ich habe bereits vor einiger Zeit ein Repository veröffentlicht, das diverse Dot-Dateien beinhaltet. Unter anderem findet man dort auch eine vim-Konfiguration.
Begonnen habe ich die Arbeit daran mit Unterstützung eines geschätzten (nunmehr leider Ex-)Kollegen, der mich darauf aufmerksam machte, dass vim eigentlich alles kann und falls man doch auf etwas stoßen sollte, das es nicht kann, gibts dafür immer noch Millionen Plugins.
Also begann ich mich, ernsthaft mit dem Thema auseinanderzusetzen - bis dahin wusste ich eigentlich nur, dass man mittels i in den Einfüge-Modus gelangt und ihn mit <ESC> wieder verlassen kann, um anschließend die Anwendung mittels :q! (nicht speichern) oder :wq (speichern) zu beenden.
Zunächst aber leghte ich fest, dass sich vim immer sofort im Einfüge-Modus startet ...
Als Erstes lernte ich, dass es einen dritten Modus gibt: den Visuellen Modus. Der dient letztendlich dazu, das aus anderen Textverarbeitungswerkzeugen bekannte Kopieren/Ausschneiden/Einfügen umzusetzen. Da ich auch im Terminal ein Mouse-Junkie bin habe ich meinen vim so konfiguriert, dass das Drücken der linken Maustaste sofort in den Visual Mode wechselt. Um präzise zu sein, muss ich ergänzen, dass es sich hier um den Visual Character Mode handelt - dann verhält vim wie man es erwarten würde: Der markierte Text wird zeichenweise selktiert. Dasselbe erreicht man, wenn man im Normal Mode v drückt. Zeilenweise Selektion ist im sogenannten Visual Line Mode über V möglich - hier ist nur die Selektion ganzer Zeilen möglich. Mit <C-v> (Ctrl+v) gelangt man schließlich in den Visual Block Mode - etwas, das der eine oder die andere vielleicht bereits aus IDEs kennt: hier kann man rechteckige Abschnitte im Text selektieren.
Ausschneiden und Einfügen funktioniert dann über d und p - wie überall kann mittels u eine Aktion rückgängig gemacht werden - zum Beispiel, wenn man bemerkt, dass man doch zu viel Text markiert hatte. Soll der selektierte Text nicht ausgeschnitten werden, benutzt man statt d einfach y zum bloßen Kopieren. (ach ja - und nebenbei: p fügt nach dem Cursor ein, P davor)
Möchte man den markierten Text ersetzen, drückt man einfach c - die Selektion wird gelöscht und man ist wieder im Insert Mode. Ebenfalls ist es einfach möglich, die Einrückung von Text zu ändern: Nach Selektion der betroffenen Zeilen einfach horizontal mittels < und > verschieben bis das gewünschte Ergebnis erzielt wurde. Aber es geht noch so viel mehr in diesem Modus - zum Beispiel Anfügen von Text am Ende mehrerer Zeilen ...
Den Visual Mode kann man auch sinnvoll beim Suchen und Ersetzen benutzen: Wird in diesem Modus ein bestimmter Textbereich selektiert, wird mit dem Kommando :s/Suchbegriff/Ersetzung/g "Suchbegriff" nur innerhalb des selektierten Bereches durch "Ersetzung" ersetzt.
Abschließend sei noch auf die Register in diesem Zusammenhang hingewiesen - eine Liste mit Inhalten aller Register ist zum Beispiel im NORMAL Mode mittels :registers einsehbar...
Zum Arbeiten mit Dateien: Wie gesagt - ich: Mouse-Junkie, daher habe ich meinen vim so hinfrisiert, dass ich mittels :Ex einen Dateibrowser aufrufen kann, in dem ich mittels Tasten navigieren und die jeweils selektierte Datei mittels <Enter> zum Editieren öffnen kann.
Eine andere Möglichkeit, die ich mir in IDEs abgeschaut habe, ist das Kommando :find, das es gestattet, den Start eines Dateinamens dahinter anzugeben. Normalerweise würde vim rekursib beginnend mit dem Verzeichnis, in dem es gestartet wurde nach Dateien suchen, die mit dem angegebenen Namen beginnen und die erste davon öffnen. Betätigt man aber (mit meiner Konfiguration) nicht <Enter>, sondern <Tab>, wird ein Dropdown mit allen passenden Dateien geöffnet, in dem man mittels <Tab> navigieren und schließlich eine der angebotenen Optionen mittels <Enter> öffnet. Dieser Dropdown-Mechanismus ist auch noch an vielen anderen Stellen aktiviert und nützlich. Es sei noch erwähnt, dass man in den Dateinamensteil auch Wildcard-Operatoren aufnehmen kann - allerdings dauert die Suche dann sehr viel länger - abhängig natürlich von der Gesamtanzahl der Dateien ...
Hat man erst einmal mehrere Dateien geöffnet, macht sich eventuell eine der vielen verfügbaren Fuß- oder Statusleisten nützlich, von denen meine Konfiguration eine als Plugin exemplarisch enthält. Hat man keine (oder möchte man das nicht) kann man sich die geöffneten Dateien immer noch mittels :buffers auflisten lassen. In dieser Liste sieht man die Nummern der Buffer. Steht dort beispielsweise eine 5, kann man den entsprechenden Buffer mittels :b5 zum Bearbeiten nach vorn holen. der aktuelle Buffer kann mittels :bd geschlossen werden, ein beliebiger wieder über seine Nummer - also zum Beispiel :bd5.
Man kann auch mehrere Dateien gleichzeitig im Blick behalten - dazu splittet man das vim-Fenster einfach in mehrere Bereiche. Im Normal Mode dienen dazu die Kommandos :split (Trennung zwischen Bereichen verläuft horizontal) und :vsplit (Trennung zwischen Bereichen verläuft vertikal). Der Wechsel zwischen den einzelnen Bereichen erfolgt am einfachsten mittels <C-w>, gefolgt von einer Cursortaste. Möchte man sich wieder nur auf einen Buffer konzentrieren, hilft das Kommando :only weiter...
Interessant ist vielleicht hierzu noch eine Erweiterung meiner Konfiguration im Repository, die die geöffneten Buffer mit den jeweiligen Cursorpositionen und einigen anderen Dingen in einer Session speichert und diese automatisch wieder herstellt, wird vim wieder im jeweiligen Verzeichnis neu gestartet.
Weiter oben wurde bereits auf eine Möglichkeit des Suchens und Ersetzens eingegangen. Hier wird eine weitere erläutert, die es erlaubt, interaktive von Fundstelle zu Fundstelle zu springen und die gefundenen Suchbegriffe zu ersetzen. Diese Variante /Suchbegriff honoriert jedoch nicht die Grenzen des im Visual Mode selektierten Bereiches!
Eine weitere interessante und nützliche Methode ist das Suchen nach einem bestimmten Begriff in allen derzeit geöffneten Buffern mittels :bufdo vimgrepadd suchbegriff % | copen.
Möchte man statt dessen in allen Dateien rekursiv beginnend mit dem Verzeichnis der aktuell geöffneten Datei suchen, ist dieses Kommando hilfreich: :grep -R '.*Suchgbegriff.*' '%:p:h' - es bevölkert die Quickfix-Liste, die man mit mittels :copen als Liste anzeigen, die sich mittels cclose wieder schließen lässt oder einfach mittels :cnext und :cprev zwischen den einzelnen Funden navigieren.
07.10.2023
Nach meinem ersten Statusupdate zum Thema vim folgt hier nun das erste Update - diesmal spezifisch zum Thema vim und Java ...
LXC Netzwerk Degrader
06.10.2019
Ich habe neulich ein Skript zur automatisierten Erstellung eines Routers in einem LXC-Container präsentiert - ein wenig wie Docker nur ohne Docker.
Weiterlesen...Android Basteln C und C++ Chaos Datenbanken Docker dWb+ ESP Wifi Garten Geo Git(lab|hub) Go GUI Gui Hardware Java Jupyter Komponenten Links Linux Markdown Markup Music Numerik PKI-X.509-CA Python QBrowser Rants Raspi Revisited Security Software-Test sQLshell TeleGrafana Verschiedenes Video Virtualisierung Windows Upcoming...
Die Royal Institution hat in ihren Schätzen gegraben und die Christmas Lectures von Carl Sagan auf Youtube nochmals veröffentlicht. Meiner Ansicht nach unbedingt lohnenswert für alle, die Englisch verstehen!
Weiterlesen...Ich beschäftige mich mit Cybersecurity auch beruflich - während mein Fokus privat und als Hobby hier eher auf crypto und im Speziellen auf PKI liegt interessiere ich mich beruflich für secure Softwareentwicklung und Minimierung von Angriffsoberflächen.
Weiterlesen...Die sQLshell ist nunmehr wieder in drei Deploymentvarianten verfügbar: Dem Standardinstaller für Linux und Windows, der portablen Version zum Start von - zum Beispiel - einem USB-Stick und endlich wieder als WebStart-Variante
Weiterlesen...Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.
Wer daran teilhaben und eventuell sogar davon profitieren möchte, muß damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.
Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...
PS: Meine öffentlichen GitHub-Repositories findet man hier - meine öffentlichen GitLab-Repositories finden sich dagegen hier.