Nach meinem ersten Statusupdate zum Thema vim folgt hier nun das erste Update - diesmal spezifisch zum Thema vim und Java ...
Ich habe mir angesehen, wie meine Arbeitsabläufe beim Entwickeln in der IDE in Java-Projekten sind und welche der von mir dort häufig einegsetzten Funktionalitäten sich einfach mit vim nachbilden lassen.
Einige solche Funktionalitäten allgemeinerer Art hatte ich im letzten Artikel bereits beleuchtet - auf diese gehe ich hier nicht nochmals gesondert ein. Ein von mir sehr häufig zurate gezogene Funktion ist Find Usage/Declaration - das Suchen der Deklaration oder aller Benutzungen eines bestimmten Symbols. Das lässt sich komfortabel in vim mittels der guten alten ctags abbilden: Mein Repository beinhaltet dafür eine (nicht von mir selbst erstellte) Konfiguration für cscope, die entsprechende Kommandos definiert. So gestatten es etwa
Indem man die Nummer der entsprechenden Fundstelle angibt, wechselt vim an die betreffende Stelle und öffnet die Datei vorher in einem neuen Buffer, falls nötig.
Wichtig war für mich an dieser Stelle die Navigation wieder zurück zu der Stelle, an der die Suche begann - besonders, wenn man auf diese Art und Weise einen ganzen Callgraph nachvollzieht. auch dafür hat vim selbstverständlich eine Lösung: die Kommandos dafür heißen
Das war bereits eine wichtige Funktionalität, die ich in meinen Arbeitsabläufen nur ungern vermissen wollte. Eine weitere war die Möglichkeit, aus der IDE - oder eben vim - heraus die aktuell editierte Klasse starten oder testen (wenn es sich um einen Unit-Test handelt) zu können. In älteren Java-Projekten habe ich noch nicht von ANT auf Maven umgestellt. Das hier Gesagte gilt für beide (und wahrscheinlich für viele andere Build-Tools), die konkreten Implementierungen im Repository beziehen sich aber auf ANT.
Zunächst muss man mittels 'compiler' in der Konfiguration das Build-tool festlegen. Dann wird mit dem vim Kommando :make dieses Tool gestartet. Gibt man hinter :make weiteren Text an, wird dieser an das Build-Tool als Kommandozeilenparameter durchgereicht. :make -f some_dir/build.xml target würde also das Target target in der Ant-Konfigurationsdatei some_dir/build.xml ausführen.
Damit startet man zunächst wie gesagt beliebige Targets des Buildprozesses. Möchte man aber wie oben beschrieben spezifische Klassen oder Tests ausführen (oder andere Targets dateispezifisch ausführen) geht das am einfachsten über Targets, die die Namen der Klassen oder Dateien aus der Kommandozeile übernehmen und dass diese dann korrekt gesetzt werden, ohne sie selber immer wieder tippen zu müssen, kann man mit folgenden Kommandos erreichen: :make -f some_dir/build.xml perform-selected-test -Dtest.file=%:r für ein Kommando, das einen Dateinamen erwartet und :make -f some_dir/build.xml run-selected-file -Drun.class=%:p für ein Kommando, das einen Klassennamen erwartet.
Geht beim Übersetzen etwas schief, kann man - mit geeigneter Konfiguration von efm vorausgesetzt - die Fehler in der Quickfix-Liste mittels :copen als Liste anzeigen, die sich mittels cclose wieder schließen lässt oder einfach mittels :cnext und :cprev zwischen den einzelnen Fehlern navigieren.
In der Konfiguration in meinem Repository ist vim übrigens so konfiguriert, dass sofort nach jedem Editiervorgang die betreffende Datei gespeichert wird, sodass man nicht vor jedem :make gezwungen ist, das noch manuell zu erledigen ...
Günstig fürs Programmieren - und eigentlich für jede Art von Arbeit am Text - ist auch eine schöne Integration von Git. Ich wählte dazu airblade/vim-gitgutter aus und wüsste nicht, was man mehr brauchen sollte. Eine hervorragende Anleitung zur Erschließung seiner Möglichkeiten gibt es im zugehörigen Repository.
Schön wäre es jetzt noch, wenn man direkt aus vim heraus auch debuggen könnte - aber das habe ich noch nicht erforscht.
30.01.2024
Ich habe bereits über meine Bemühungen berichtet, mir Vim so zu konfigurieren, dass ich nicht mehr von irgendwelchen IDEs abhängig bin und trotzdem einigermaßen komfortabel Software entwickeln kann.
30.12.2023
Dieses Jahr ist auch wieder rum. Zeit, nach vorne und Zurück zu blicken...
Multi-User-WebDAV, Docker, GitHub
17.11.2019
Nachdem ich mich in letzter Zeit verstärkt mit Docker und dem zugehörigen Ökosystem beschäftige, habe ich begonnen, verschiedenste Dienste in Containern zu testen um zu sehen, ob in manchen Fällen LXC oder KVM nicht doch die bessere Wahl wäre...
Weiterlesen...Android Basteln C und C++ Chaos Datenbanken Docker dWb+ ESP Wifi Garten Geo Go GUI Gui Hardware Java Jupyter Komponenten Links Linux Markdown Markup Music Numerik OpenSource PKI-X.509-CA Python QBrowser Rants Raspi Revisited Security Software-Test sQLshell TeleGrafana Verschiedenes Video Virtualisierung Windows Upcoming...
In eigener Sache...
Weiterlesen...Ich habe eine neue Java Swing Komponente erstellt: Es handelt sich um einen Wrapper für von JToolBar abgeleitete Klassen, die die Werkzeugleiste minimieren und sie nur dann einblenden, wenn der Mauszeiger über ihnen schwebt.
Weiterlesen...Ich habe bereits in einem früheren Artikel über meine ersten Erfolge berichtet, der sQLshell auf Basis des bestehenden Codes aus dem Projekt EBMap4D eine bessere Integration für Geo-Daten zu spendieren und entsprechende Abfragen, bzw. deren Ergebnisse auf einer Kartenansicht zu visualisieren.
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, muss 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 Codeberg-Repositories findet man hier.