Warp: Your terminal, reimagined

10.04.2024Stefan Welsch
Tech Artificial Intelligence Rust Developer Experience teamcollaboration macos Productivity

Banner

Heute will ich mir Warp anschauen, ein Terminal, welches die Softwareentwicklung durch Geschwindigkeit und Effizienz revolutionieren soll. @Ricky hat uns bereits Fig.io vorgestellt, was in eine ähnliche Richtung geht, allerdings mittlerweile von AWS übernommen wurde und viele seiner nützlichen Funktionen dadurch erstmal “einbussen” musste.

Erstmal wie gewohnt ein paar Eckdaten zu Warp. Warp wurde im Juni 2020 von Zach Lloyd, einem ehemaligen Principal Engineer bei Google und Interims-CTO bei TIME, gegründet. Das Ziel war, eine moderne Version des Kommandozeilen-Terminals zu entwickeln, das nativ in Rust gebaut wurde. Im April 2023 führte Warp “Warp AI” ein, eine Integration eines Chatbots in das Terminal. Im Juni 2023 wurde Warp Drive eingeführt, um die Zusammenarbeit an der Kommandozeile zu erleichtern, wobei Entwickler templategestützte Befehle mit ihren Teams mittels integrierter Cloud-Speicherung teilen können. Im Februar 2024 wurde Warp offiziell für Linux veröffentlicht, wobei fast 98% der zugrunde liegenden Codebasis mit der macOS-Version geteilt wurden. Für Windows User gibt es Warp derzeit leider noch nicht, ist aber geplant.

Damit aber erstmal wieder genug der Theorie. Wollen wir uns die Features von Warp doch mal im Detail anschauen. Wie immer ist es für Mac Benutzer sehr einfach das Terminal zu installieren.

1
brew install --cask warp

Und nun kann es auch schon losgehen. Leider ist es bei Warp nötig einen Account zu erstellen, bevor man das Terminal nutzen kann. Nun das gibt auf jeden Fall mal einen Minuspunkt, aber wenn die Funktionialität stimmt, kann ich da auch schon mal ein Auge zudrücken ;-)

Nachdem Warp gestartet ist, sehe ich den folgenden Screen:

image-20240315102224483

Ich will auf die vielen Settings, welche man in Warp einstellen kann nicht weiter eingehen. An dieser Stelle möchte ich nur erwähnen, dass man Warp wirklich sehr auf seine individuellen Bedürfnisse anpassen kann.

Command Completions

Schauen wir uns als allererstes doch mal die Command Completions an. Das bedeutet, dass Warp uns auf “Knopdruck” ein Command ergänzen kann. Eine Liste, welche Commands aktuell unterstützt werden, findet ihr hier: Command Completions. Die Completion aktiviert man mit Tab. Dies ist etwas gewöhnungsbedürftig, denn in Warp kann man die Standard-Tab Funktion nicht nutzen und es wird auch kein direktes Autocompletion ausgeführt. Gebe ich also den folgenden Befehl ein und drücke Tab erhalte ich diese Ausgabe:

1
cd [TAB]

image-20240315121428567

Wie man sieht, erhält man zwar eine Liste aller Ordner, allerdings muss ich scrollen um alle zu sehen. Im normalen Terminal wird auch direkt Example beim Befehlt ergänzt, da alle Ordner mit diesem Namen beginnen. Zum Vergleich hier die Ausgabe im normalen Terminal. Ich finde diese tatsächlich übersichtlicher. Vielleicht können die Entwickler von Warp, hier nochmal in den Verbesserungsprozess gehen.

image-20240315121447093

Zum Ausführen eines Befehls, ist Warp allerdings sehr nützlich. Will ich beispielsweise mein Git Origin umbenennen, so hilft mir Warp perfekt mit der Autocompletion.

image-20240315122024743

image-20240315122115200

Wie man hier im Bild sehen kann, sind auch die Command Completions noch nicht zu 100% perfekt implementiert. Bei git remote rename wurde die Beschreibung offensichtlich von git remote rm kopiert 😉.

Window, Tabs and Split Panes

Das Fenster und Tab Verhalten in Warp ist wie man es gewohnt ist. Mit CMD + N öffnet man ein neues Fenster, mit CMD + T ein neues Tab im Fenster. Mit CMD + W kann man diese dann wieder schliessen. Hat man aus Versehen einen Tab oder auch ein Fenster geschlossen, so kann man diese mit CMD + SHIFT + T wieder herstellen.

Warp bietet uns ausserdem Split Panes an. Damit können wir also einen einzelnen Tab widerrum unterteilen. Mit CMD + D kann man horizontal splitten und mit CMD + SHIFT + D vertikal. Mit CMD + OPTION + Pfeiltaste kann man zwischen den Panes hin und herspringen und mit CMD + W das entsprechende Pane einfach wieder schliessen. Ein sehr nützliches Feature ist die Synchronisierung von Panes innerhalb eines Tabs. Diese kann man mit der folgenden Tastenkombination ein- und wieder ausschalten: CMD + OPTION + I .

Warp AI

Wollen wir uns als Nächstes mal das gross angepriesene Feature anschauen, welches Warp uns bietet: “Warp AI”. Die Interaktion mit Warp AI erfolgt direkt im Terminal, wobei Benutzereingaben direkt an die OpenAI APIs gesendet werden, ohne dass Warp in den Datenaustausch eingreift. Warp hat die Integration übrigens so konfiguriert, dass OpenAI diese Daten nicht zur Schulung ihrer Modelle verwenden darf. Diese Konfiguration stellt sicher, dass die Daten der Benutzer privat bleiben und Warp eine “hands off”-Herangehensweise verfolgt, was bedeutet, dass die Terminal-Eingabe- und Ausgabedaten der Benutzer nicht auf den Warp-Servern gespeichert werden.

Wie bereits im ersten Bild oben gesehen (Startscreen von Warp), können wir die Warp AI mit “^ Space” starten, oder einfach “#” eingeben.

[!NOTE]

Bei mir lokal hat ^ Space nicht funktioniert und ich musste auf “#” ausweichen, was meiner Meinung nach aber auch viel praktischer ist

Nun wollen wir die AI mal ausprobieren. Ich versuche einen Befehl zu finden, mit welchem ich alle Dateien in einem Ordner löschen kann, welche älter als 30 Tage sind. Da ich schon längere Zeit mit ChatGPT(OpenAI) arbeite, erwarte ich hier keine negativen Überraschungen.

image-20240315103455872

Und wie bereits vermutet, erhalten wir innerhalb kürzester Zeit einen Vorschlag, wie wir unser Problem lösen können. Obwohl dies ein echt cooles Feature ist, ist es so selbsterklärend, dass man hier denke nicht weiter eingehen muss.

Blöcke

Die Ausgabe von Warp ist unterteilt in sogenannte Blöcke. Das ist sehr übersichtlich, da man genau sieht, welches Command zu welcher Ausgabe geführt hat. Schauen wir uns die Blöcke mal genauer an.

image-20240315104043460

Jeder Block ist hier durch einen Strich getrennt und auf jedem Block, kann ich nun widerrum Funktionen ausführen. Nehmen wir uns als Beispiel mal die letzte Ausgabe, also das cat log.txt. Der Block ermöglicht es uns nun, diese Ausgabe zu filtern. Wenn ich über den Block hovere, dann erscheinen rechts oben in der Ecke Symbole.

image-20240315104251974

Wenn wir nun mal auf das Filtersymbol klicken, erscheint ein Eingabefenster, mit welchem wir innerhalb dieses Blockes suchen können.

image-20240315104358180

Das ist super hilfreich, vor allem da man so auch in laufenden Prozessen nach bestimmten Logausgaben suchen kann.

Zusätzlich kann man sich Blöcke auch noch bookmarken, so dass man diese schneller wieder finden kann. Das ewige rumgescrolle im Terminal hat damit nun endlich ein Ende. Über das AI Symbol kann man sich auch noch die potenziell nächsten Schritte ausgeben lassen, welche man nach der letzten Eingabe ausführen könnte.

Wenn wir in das erweiterte Menu gehen, sehen wir weitere sehr nützliche Aktionen, welche wir mit einem Block machen können. image-20240315104823176

Ein sehr nützliches Feature dabei ist “Share…”. Damit kann man das Command und/oder die Ausgabe zu jemandem weiterleiten.

image-20240315104958364

Hier habe ich ein Beispiel, wie so ein Embedding aussehen könnte.

Der Blitz

Ein letztes sehr nützliches Feature in einem Block ist die AI Funktion. Wenn man in einem Block beispielsweise beim Kompilieren einer Datei oder beim Starten des Servers einen Fehler erhält, so kann man einfach auf den kleinen Blitz in der oberen Ecke klicken und Warp hilft dir dabei diesen Fehler zu lösen. Dazu wird ein Prompt mit der Fehlermeldung erstellt mit der Frage, was man tun soll.

image-20240322072357193

So spart man sich also das Öffnen eines Browserfensters und das Schreiben eines Prompts.

Workflows

Warp bietet uns ein weiteres grossartiges Feature, die sogenannten Workflows. Hiermit ist es möglich Kommandos zu parametrisieren, damit man diese schneller ausführen kann. Warp bietet hier bereits vordefinierte Workflows an.

Um in die Ansicht für die Workflows zu kommen drücken wir erstmal CONTROL + SHIFT + R. Damit erhalten wir eine Übersicht über alle bereits angebotenen Workflows.

image-20240315140626550

Ich kann jetzt beispielsweise nach einem Workflow suchen. Ich will erstmal alle Prozesse sehen, welche auf einem bestimmten Port laufen. Ich suche also nach “List Pr” und schon erhalte ich einen Workflow, welcher genau das zu machen scheint, nachdem ich suche:

image-20240315141115651

Mit Enter gelange ich dann in der Platzhalter, welcher in dem Workflow definiert wurde.

image-20240315141152684

Hier gebe ich nun einfach noch meinen Port an und erhalte das gewünschte Ergebnis:

image-20240315141226499

So können wir nun bequem aus den bereits vorhandenen Workflows, etwas Passendes für unserer Probleme heraussuchen. In dem meisten Fällen will man aber eigene Workflows für komplexere Kommandos definieren. Auch hierfür bietet Warp uns einen Mechanismus an.

Custom Workflows

Um einen Workflow in Warp zu erstellen, kann man verschiedene Einstiegspunkte nutzen:

  • Warp Drive mit der Option “+ > Neuer Workflow”

  • Im Block mit “Als Workflow speichern”

  • Aus Warp AI-Ergebnissen mit “Als Workflow speichern”

  • Befehlspalette mit “Erstelle einen neuen persönlichen Workflow”.

In dem Workflow-Editor kannst du dann den Workflow benennen, den Befehl samt Argumenten bearbeiten, eine Beschreibung hinzufügen und Argumente samt Beschreibungen und Standardwerten definieren. Die Workflows können dann leicht über die Befehlspalette oder Warp Drive ausgeführt werden. Wollen wir uns doch mal so einen Workflow selbst erstellen.

Ich möchte gerne die Python Version im Terminal einfach überschreiben können. Ich bin mir bewusst, dass eine venv der präferierte Weg ist, dies für mein jeweiliges Projekt zu tun, aber es geht mir hier eher um ein anschauliches Beispiel. Aktuell ist python3.9 als Default bei mir eingestellt.

image-20240315142521770

Nun kann ich über einen Alias diese Version ändern. Ich gebe in Warp also folgendes ein:

1
alias python=python3.11

Wenn ich mir nun wieder die Version ausgeben lasse, erhalte ich die entsprechende 3.11 Python Version

image-20240315142722245

Nun kann ich aus dem Block, in welchem im den alias Befehl eingegeben habe direkt einen Workflow erstellen. Dazu klicke ich ganz rechts im Block auf die 3 Punkte und wähle den Menüpunkt Save as Workflow aus.

image-20240315142858001

Nun erscheint ein Fenster, in dem ich Name, Beschreibung und auch Parameter für den Workflow definieren kann.

image-20240315143013552

Die Version ersetze ich dabei durch einen Platzhalter und wähle eine Default Version aus. Danach klicke ich Save Workflow.

Wenn ich jetzt wieder in die Liste der Workflows gehe (CONTROL + SHIFT + R) und dort nach “Change” suche, sehe ich meinen neu erstellten Workflow in der Liste und kann diesen mit Enter ausführen.

image-20240315143252557

image-20240315143329458

Dieses Feature ist wirklich praktisch, wenn man Skripte oder Aktionen hat, welche immer wieder ausgeführt werden müssen. Natürlich könnte man sich hierfür auch einen Alias anlegen, aber dann könnte man nicht das machen, was ich euch gleich noch zeige.

Warp Drive

Wie gesagt, sind Workflows ein recht cooles Mittel, wiederkehrende Kommandos zu speichern und zu automatisieren. Noch cooler ist es aber, dass man diese Workflows nun auch mit seinem gesamten Team teilen kann.

Hier kommt nun Warp Drive ins Spiel. Damit haben wir genaue diese Möglichkeit. Oben links in Warp haben wir ein kleines Symbol, welches aussieht, wie ein zerrissenes Buch oder Blatt.

image-20240315143825920

Hiermit können wir Warp Drive öffnen und dort ein neues Team anlegen.

image-20240315143926669

Nun sehen wir schon, dass unter dem Punkt Personal, der neu erstellte Workflow “Change Python version” zu sehen ist. Diesen können wir jetzt einfach per Drag & Drop nach oben zum Team verschieben und schon hat jeder die Möglichkeit, diesen Workflow bei sich selbst zu nutzen. Pretty cool!

image-20240315144050287

Tipps & Tricks

Damit nähern wir uns bereits dem Ende des heutigen TechUp. Ich gebe euch noch ein paar Dinge mit an die Hand, welche ich als sehr nützliche empfunden habe.

Warp hat eine Datei, Link und Skript Integration. Wenn wir im Terminal beispielsweise ein ls ausführen und Dateien und Ordner gelistet werden, können wir bei gedrückter CMD Taste und einem Klick auf den Ordner oder die Datei diese öffnen.

image-20240315144453069

Das Öffnen der jeweiligen Dateien und Ordner erfolgt in dem vom User dafür vorgesehenen Programm.

Markdown

Weiterhin bietet uns Warp einen Markdown Viewer. Wenn ich also ein cat auf eine Markdown Datei mache, fragt mich Warp, ob ich diese Datei im Warp Viewer anschauen will

image-20240315144720357

Mit einem Klick auf View in Warp öffnet sich ein Pane mit dem gerenderten Markdown.

image-20240315144813609

SSH

Warp bietet uns einen SSH Wrapper an, welcher die Warp Features sogar im Remote Terminal ermöglicht. Das bringt uns natürlich etliche Vorteile, weil wir Workflows und Commands für alle Systeme an einer Stelle verwalten können.

Integration in IDE

Ein wichtiger Punkt wäre noch die Integration in die IDE. Schön wäre es, wenn das Terminal dort voll integriert ist und ich nicht jedesmal das Programm wechseln muss, wenn ich was im Terminal eingebe. Schauen wir uns an, was Warp uns hier bietet.

Ich nutze überwiegend Jetbrains IntelliJ und auf der Seite mit den bereits bestehenden Integrationen gibt es auch eine Anleitung für die IDE. Leider ist Warp hier aber nur als externes Terminal einsetzbar. Glücklicherweise kann man sich aber einen Shortcut erstellen, mit welchem man das Terminal dann doch relativ schnell erreichen kann.

Fazit

Mein Fazit zu Warp ist sehr gut. Warp erleichtert das Arbeiten mit dem Terminal erheblich. Es dauert eine kleine Zeit, bis man sich an Warp als Terminal gewöhnt hat, aber wenn man den Umstieg erst einmal gemacht hat, will man nicht mehr auf das normale Terminal zurück.

Sehr praktisch ist natürlich auch die Teamfunktion und damit das Teilen der Workflows und Commands.

Leider ist die Integration in eine IDE nicht sehr zufriedenstellend. Es gibt zwar Shortcuts, mit welchen wir das Terminal aus der IDE öffnen können, aber leider müssen wir dafür immer das Fenster wechseln. Nun da ich zum Glück 3 Monitore habe, kann ich auch mit diesem Umstand gut leben ;-)

Ich bin sehr gespannt wie die Entwicklung des Terminals in der nächsten Zeit noch weitergeht und welche nützlichen Features sich Warp noch überlegen wird.

Stefan Welsch

Stefan Welsch – Manitu, Pionier, Stuntman, Mentor. Als Gründer von b-nova ist Stefan immer auf der Suche nach neuen und vielversprechenden Entwicklungsfeldern. Er ist durch und durch Pragmatiker und schreibt daher auch am liebsten Beiträge die sich möglichst nahe an 'real-world' Szenarien anlehnen.