Vim und Java

vorhergehende Artikel in: Linux
07.10.2023

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 s und g etwa vergleichbare Funktionalitäten zur Suche nach Symbolen auszulösen.

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 und - damit springt man in der Liste der besuchten Location bufferübergreifend vor und zurück.

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.

Artikel, die hierher verlinken

Autocomplete mit LSP und Vim

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.

In eigener Sache mit Blick auf 2024

30.12.2023

Dieses Jahr ist auch wieder rum. Zeit, nach vorne und Zurück zu blicken...

Alle Artikel rss Wochenübersicht Monatsübersicht Github Repositories Gitlab Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Mandelbrot-Sets mittels Shadern berechnen

    17.05.2019

    Nachdem ich in den letzten verregneten Tagen auf Youtube in den Videos von Numberphile versunken bin, hat mich eines davon angestachelt, mich selbst mit dem Mandelbrotset zu beschäftigen. Als ich dann noch Code fand, der behauptete, das auf einer Graphikkarte mittels Shadern berechnen zu können, war es um mich geschehen...

    Weiterlesen...

Neueste Artikel

  • Erste Vor-Version eines Gis-Plugin für die sQLshell

    Wie bereits in einem früheren Artikel erwähnt plane ich, demnächst ein Plugin für die sQLshell anzubieten, das eine Visualisierung von Daten mit räumlichem Bezug im Stil eines Geoinformationssystems erlaubt.

    Weiterlesen...
  • bad-certificates Version 2.1.0

    Das bereits vorgestellte Projekt zur automatisierten Erzeugung von Zertifikaten mit allen möglichen Fehlern hat eine Erweiterung erfahren und verfügt über ein Partnerprojekt - beide sind nunmehr in der Version 2.1.0 freigegeben

    Weiterlesen...
  • SQLite als Geodatenbank

    Wie bereits in einem früheren Artikel beschrieben treibe ich derzeit Anstrengungen voran, die sQLshell attraktiver für Nutzer zu machen, die mit Geodatenbanken arbeiten.

    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.