Advertisement
  1. Code
  2. Tools & Tips

Wie man Ihre Eingabeaufforderung anpassen kann

Scroll to top
Read Time: 13 min

German (Deutsch) translation by Nikol Angelowa (you can also view the original English article)

In letzter Zeit habe ich oft die Frage bekommen: "Wie haben Sie Ihr Terminal dazu gebracht, so auszusehen, wie es aussieht?" Wenn Sie mein Terminal bemerkt haben und neugierig sind, wie ich es eingerichtet habe, ist dies das Tutorial für Sie! Natürlich reicht das, was Sie hier lernen, aus, um auch Ihre eigene benutzerdefinierte Eingabeaufforderung zu erstellen!


Bevor wir anfangen, möchte ich etwas sehr klar machen. Ich bin sicherlich ein Kommandozeilen-Enthusiast, aber ich bin überhaupt kein Kommandozeilen-Profi. Ich fühle mich in einem Terminal zu Hause, aber ich bin weit davon entfernt, alles zu wissen. Hier ist also der Deal: Ich werde Ihnen zeigen, wie ich mein Terminal eingerichtet habe, aber das bedeutet nicht, dass ich jede einzelne Codezeile erklären kann, die wir uns ansehen werden. Es gibt einige Dinge hier, die so sind, wie sie sind, nur weil das funktioniert… und ich weiß nicht immer zu 100% warum.

Lassen Sie uns mit diesem Haftungsausschluss sehen, was wir tun.


Treffen mit dem fertigen Produkt

So sieht meine Eingabeaufforderung aus:

Wenn Sie sich nicht sicher sind, was Sie dort sehen, lassen Sie mich erklären:

  • Im Türkis haben wir den Namen des Computers; In meinem Fall ist das mothership. Darauf folgt ein Doppelpunkt.
  • Danach haben wir das Arbeitsverzeichnis in gelb-orange.
  • Wenn wir uns in einem Git-Repository befinden, haben wir als nächstes einige Informationen dazu. Die Hauptsache hier ist der Filialname (master oder tilt_in_post_class im Screenshot). Wenn das Arbeitsverzeichnis sauber ist, wird dieser Text grün angezeigt. Andernfalls wird es rot angezeigt.
  • Endlich haben wir eine Batterieanzeige. Wenn die zehn Dreiecke alle grün und ausgefüllt sind, werden die Dinge eingeschaltet. Wenn sich meine Batterie leert, leeren sich die Dreiecke und werden schließlich rot. Wenn Sie nicht wie ich auf einem Laptop sitzen, ist dies für Sie natürlich nicht so nützlich.

Die Umwelt vorbereiten

Lassen Sie uns nun ein paar vorläufige Teile zusammenstellen, bevor wir tatsächlich einige Shell-Skripte schreiben.

Erstens gibt es das Farbschema. Sie können es als Ethan Schoonovers solarisiertes Farbschema erkennen. Es ist ziemlich erstaunlich und ich habe es sowohl auf dem Terminal als auch in Vim verwendet, seit ich es entdeckt habe. Wenn Sie es im Terminal verwenden möchten, müssen Sie das Design installieren. Das Terminal in Snow Leopard hat xterm-256color nicht unterstützt. Sie müssen daher einige spezielle Anweisungen auf der Solarized GitHub-Seite befolgen, damit dies funktioniert, wenn Sie noch auf diesem Betriebssystem arbeiten.

Wenn Sie zu Lion gewechselt sind, können Sie einfach die .terminal-Dateien installieren, die Sie im Ordner xterm-256color finden. Sobald Sie diese installiert haben (doppelklicken Sie einfach darauf), sollten Sie in den Terminaleinstellungen die gewünschte auswählen können. Vergessen Sie nicht, es als Standardschema festzulegen.

Dann muss ich wissen, dass ich in meinem Terminal nicht die Standard-Bash-Shell verwende. Stattdessen habe ich zu zsh gewechselt, was im Grunde viel Bash-kompatibel ist, aber ein paar nette Ergänzungen hat, wie eine bessere Tab-Vervollständigung. So geht's: Öffnen Sie die Mac-Systemeinstellungen und gehen Sie zu "Users und Gruppen". Entsperren Sie den Bereich, indem Sie auf die Sperre unten klicken und Ihr Passwort eingeben. Klicken Sie dann mit der rechten Maustaste auf Ihren Benutzer in der Liste und wählen Sie "Erweiterte Optionen". Wechseln Sie im Feld "Login Shell" von /bin/bash zu /bin/zsh. So einfach ist das.

Schriftarten

Nächster Schritt: Holen Sie sich die richtige Schriftart. Ich benutze Inconsolata bei 15pt. Es ist eine kostenlose Monospace-Schrift, auf die ich den ganzen Tag gerne starre. (Neben der Verwendung im Terminal verwende ich es auch in Vim und TextEdit.) Sie können Ihre Standardschriftart in den Terminaleinstellungen festlegen, genau dort, wo Sie das Farbschema auswählen.

Eine weitere Kleinigkeit ist die Größe Ihres Fensters: Öffnen Sie die Terminaleinstellungen > Einstellungen und klicken Sie auf die Registerkarte Fenster. Auf halber Strecke können Sie die Anzahl der gewünschten Spalten und Zeilen auswählen. Ich benutze 130 Spalten mal 30 Zeilen.

Batterie

Erinnern Sie sich an die Batteriestandsanzeige? Nun, das erfordert ein kleines Skript von Entwickler Steve Losh; Kopieren Sie das einfach in eine Datei und speichern Sie es als Python-Datei. Da sich ~/bin in meinem Terminal PATH befindet, habe ich die Datei in ~/bin/batcharge.py gespeichert. Wie er bemerkt, funktioniert dieses Skript nur unter Mac OS X. Wenn Sie also zsh auf einem anderen System ausführen, müssen Sie diesen Teil weglassen.

Zsh

Last, but not least gibt es oh-my-zsh. Laut dem Github-Repo ist dies nur "eine Handvoll Funktionen, automatisch vervollständigte Helfer und Dinge, die Sie dazu bringen," OH MY ZSHELL! "Zu rufen.

Warum es benutzen? Für mich habe ich beschlossen, es einmal auszuprobieren, und ich habe es installiert gelassen. Wenn Sie das Terminal häufig benutzen, stöbern Sie ein wenig in oh-my-zsh herum, wenn Sie etwas Zeit haben. Sie könnten überrascht sein, was Sie finden werden. Die Installation von oh-my-zsh ist recht einfach: Befolgen Sie einfach die Setup-Anweisungen in der README-Datei. Sie sind ziemlich einfach.

Jetzt haben wir alle notwendigen Teile an Ort und Stelle. Wir sind bereit, unser benutzerdefiniertes Terminal zu erstellen.


Dateien erstellen

Wenn Sie oh-my-zsh installiert haben, wurde es auf ~/.oh-my-zsh installiert. Pop das auf. Sie sehen zwei wichtige Ordner: themes und templates. In templates finden Sie eine Datei mit dem Namen zshrc.zsh-template. Dies ist eine Vorlage für Ihre ~/.zshrc-Datei. Wenn Sie Ihr Terminal bereits angepasst haben, wissen Sie, dass in der .bashrc-Datei Ihre Anpassungen gespeichert sind, wenn Sie eine Bash-Shell verwenden. Die .zshrc ist bis auf die zsh-Shell dasselbe. Öffnen Sie also diese Vorlagendatei. Sie müssen nicht genau wissen, was los ist. Schließlich enthält die Datei viele Kommentare, die möglicherweise keinen Sinn ergeben. Eines ist hier wichtig zu verwenden. Beachten Sie die Zeile, in der Folgendes steht:

Das ist der Name des Themas, das Ihr Terminal verwendet. Schauen Sie im themes ordner nach: Sie sehen eine robbyrussel.zsh-theme datei. Wir erstellen ein eigenes Thema, sodass Sie diese Zeichenfolge durch den Namen unserer neuen Datei ersetzen können. Ich habe mein "Doubleend" unkreativ genannt, weil es auf beiden Seiten des Terminals eingedrungen ist.

Alle anderen Anpassungen, die Sie an Ihrer zsh-Umgebung vornehmen möchten, können in dieser Datei vorgenommen werden. Wenn Sie das Terminal häufig benutzen, sehen Sie sich die Plugins von oh-my-zsh (im plugins-Ordner) an: eine Menge nützlicher Dinge.

Vergessen Sie nicht, in die zshrc.zsh-template in Ihr Ausgangsverzeichnis zu kopieren und in .zshrc umzubenennen, bevor Sie Ihre Änderungen vornehmen. Erstellen Sie nun im themes ordner eine Datei mit dem in Ihrer .zshrc-Datei festgelegten Themennamen. Stellen Sie sicher, dass Sie ihm die Erweiterung .zsh-theme geben. Wir sind bereit, unser benutzerdefiniertes Thema zu erstellen.


Erstellen des benutzerdefinierten Themas

Das Wichtigste in Ihrer Themendatei ist die Variable PROMPT. Der Inhalt ist Ihre Eingabeaufforderung. Um sich ein Bild davon zu machen, beginnen Sie einfach damit in Ihrer Themendatei:

Öffnen Sie ein neues Terminalfenster und Sie sollten Folgendes sehen:

Also gut, machen wir uns an die Arbeit. Wir müssen mehrere Funktionen schreiben, aber wir beginnen mit der PROMPT-Variablen. Beim Betrachten des Terminals fällt es möglicherweise nicht auf, aber meine Eingabeaufforderung enthält drei Zeilen. Die erste ist eine leere Zeile, nur um mir etwas Luft zum Atmen zu geben. Der zweite hat alle Informationen und der dritte hat den Pfeil. In dieser dritten Zeile geben Sie den Befehl tatsächlich ein. Also, hier ist unser Anfang:

Ja, Sie können mehrzeilige Zeichenfolgen einfach in Shell-Skripten erstellen. Aber was ist mit $reset_color los? Das ist eine Variable, die oh-my-zsh für uns definiert. es setzt die Farbe der Ausgabe zurück. Dies erfordert eine kurze Umleitung, um zu besprechen, wie wir verschiedene Wörter in der Eingabeaufforderung färben. Sie sehen, es gibt einen Code - eine Reihe von Zeichen -, der den folgenden Text in eine Farbe umschaltet. Natürlich gibt es für jede verfügbare Farbe einen Code. Keine Sorge, es gibt andere Variablen für die anderen Farben. Sie müssen die Codes nicht lernen. Bis wir jedoch zur dritten Zeile gelangen, möchten wir diese auf die Standardtextfarbe zurücksetzen. Daher verwenden wir die Variable $reset_color.

Wenn Sie neugierig auf das Pfeilzeichen sind, handelt es sich um den Unicode-Pfeil nach rechts (U+2192, →). Das ist alles.

Jetzt sieht unsere Eingabeaufforderung folgendermaßen aus:

Sieht schlank aus. Fügen wir nun den Computernamen und das Arbeitsverzeichnis hinzu. Dies ist alles für die zweite Zeile unserer PROMPT-Variablen.

Wir beginnen mit der Einstellung der Textfarbe auf Cyan. Es scheint, dass wir diesen Farbcode von einem assoziativen Array oder Hash erhalten. Obwohl ich es nicht benutze, gibt es einen $bg-Hash, der die Hintergrundfarbe anstelle der Vordergrundfarbe (Textfarbe) ändert.

Nach dem Einstellen der Farbe haben wir %m, wodurch der Name des Computers ausgegeben wird. Nach dem Doppelpunkt und dem Leerzeichen wechseln wir die Textfarbe zu Gelb. Als nächstes verwenden wir das Dollarzeichen und Parens, um die Ausgabe der Funktion get_pwd hinzuzufügen. Dies wird unser aktuelles Arbeitsverzeichnis ausgeben, wir haben eine kleine Wendung. Wenn ich mich im Home-Verzeichnis befinde, möchte ich /Users/andrew nicht sehen, sondern ~. Also, hier ist diese Funktion:

Die Funktionsshell ist ziemlich einfach, wenn Sie zuvor JavaScript geschrieben haben. identische Syntax. Ich bin nicht sicher, woher diese Syntax zum Suchen und Ersetzen stammt, aber das sieht der Syntax zum Suchen und Ersetzen von Vim ziemlich ähnlich: Wenn PWD den Text $HOME (eine Systemvariable für Ihr Home-Verzeichnis) enthält, ersetzen Sie ihn durch ~.

Hier ist, was unten ist:

Gut! Jetzt kommt der schwierige Teil. Sie sehen, ich möchte die Git-Informationen und die Batterieanzeige nach rechts ausrichten. Da es keine Möglichkeit gibt, tatsächlich rechts auszurichten, müssen wir die Anzahl der gewünschten Textzeichen zählen, diese von der Breite des Fensters subtrahieren und diesen Abstand hinzufügen. Es ist ziemlich hackig und der Code ist ziemlich chaotisch, aber es ist alles, was ich finden konnte, dass es tatsächlich funktioniert.

Bereit? Wir fügen den Abstand mit einer Funktion ein, die ich get_spacing nenne. Fügen Sie also $(get_spacing) am Ende unserer zweiten Zeile hinzu, damit es jetzt so aussieht:

Nun, diese Funktion. Hier ist natürlich die Shell:

Es gibt vier Teile im Inneren. Hier ist der erste.

Wir beginnen damit, die Ausgabe von der Funktion git_prompt_info abzurufen und in einer lokalen Variablen, git, zu speichern. Wenn die Länge dieser Zeichenfolge nicht 0 ist, setzen wir git zurück, sodass jetzt die Länge der Zeichenfolge minus 10 ist. Andernfalls setzen wir git auf 0 zurück. Dies scheint nicht viel Sinn zu machen, bis Sie erkennen, was wir hier versuchen. Wir wollen herausfinden, wie viele Zeichen-Slots die Git-Informationen belegen. Der schwierige Teil ist, dass wir die Variable git wiederverwenden: Zuerst enthält sie die Zeichenfolge, dann die Zahl, die die Anzahl der Zeichen darstellt, für die unsere Git-Informationen lang sind. Wenn git null Zeichen lang ist, setzen wir git auf 0; Wenn dies nicht der Fall ist (dh wir befinden uns in einem Git-Repository), setzen wir git auf die Anzahl der Zeichen in der Zeichenfolge minus 10. Dies liegt daran, dass die Anzahl der Zeichenfolgen die Farbcodes enthält, die tatsächlich nicht sichtbar sind, sodass sie keine Breite einnehmen. Die Doppelparens? Oh, sie werden zum Rechnen verwendet.

Wir machen das Gleiche für die Batterieleistung:

Im dritten Teil finden wir heraus, wie viel Platz wir benötigen:

Ein bisschen mehr Mathe: Wir beginnen mit COLUMNS, dh der Anzahl der Zeichen, die das Terminal breit ist. Wir subtrahieren alle entsprechenden Werte (die 3 steht für zwei Leerzeichen und einen Doppelpunkt) und haben am Ende die Tatsache, dass wir eine Anzahl von termwidth zwischen dem linken und dem rechten Teil der Eingabeaufforderung benötigen.

Erstellen wir nun eine Zeichenfolge mit einer termwidth von mehreren Leerzeichen:

Mit einer einfachen For-In-Schleife können wir den String erstellen. dann geben wir es zurück.

Sie können nicht wirklich sagen, dass das Leerzeichen hinzugefügt wurde, daher habe ich einen Dummy-Text hinzugefügt, damit Sie sehen können, dass er hinzugefügt wurde.

Dann die Git-Infos. Wir fügen $(git_prompt_info) am Ende der Eingabeaufforderungszeile 2 hinzu. Wie Sie wissen, ist das ein Funktionsaufruf.

Beachten Sie, dass wir die Farbe vor dem Laden der Git-Informationen nicht ändern: Die Funktion kümmert sich darum, da dies vom Repository-Status abhängt.

Und hier ist die Funktion:

In der ersten Zeile wird nur überprüft, ob wir uns in einem Git-Repository befinden. Wenn wir nicht sind, kehren wir return. Wenn ja, gibt die nächste Zeile die richtigen Informationen echo. Beachten Sie hier zwei Dinge: Erstens verwenden wir zwei Variablen: $ZSH_THEME_GIT_PROMPT_PREFIX und $ZSH_THEME_GIT_PROMPT_SUFFIX. Ich werde Ihnen gleich zeigen, wie diese definiert sind. Die andere Sache sind zwei andere Funktionen, die aufgerufen werden. Diese werden von oh-my-zsh zur Verfügung gestellt. Die Funktion current_branch gibt nur den aktuellen Zweig zurück. Interessanter ist jedoch die parse_git_dirty. Wenn der aktuelle Zweig verschmutzt ist (nicht festgeschriebene Änderungen aufweist), gibt die Funktion $ZSH_THEME_GIT_PROMPT_DIRTY aus. Andernfalls wird $ZSH_THEME_GIT_PROMPT_CLEAN ausgegeben.

Ich habe diese vier Variablen wie folgt definiert:

Basierend auf diesen Variablen gibt ein Repo in einem sauberen Master-Zweig [git:master] in grün aus. Ein schmutziger Master-Zweig gibt + [git:master] aus.

Und zum Schluss rufen wir die Funktion battery_charge auf:

Hier ist die battery_charge funktion:

Wenn die Datei vorhanden ist, führen wir diese Datei aus und geben die Ausgabe wieder. Beachten Sie, dass wir die Backticks für die Ausführung der Datei verwenden (dies sind keine einfachen Anführungszeichen): Auf diese Weise können wir eine Codezeichenfolge so ausführen, als ob sie sich im Terminal befände. Wenn die Datei nicht existiert, geben wir nur eine leere Zeichenfolge wieder.

Und damit sind wir fertig! Folgendes beenden wir:


Abschluss

So sieht mein Terminal aus. Ich habe das oh-my-zsh-Projekt auf GitHub gegabelt und dieses Thema hinzugefügt, damit Sie es dort finden können. Wenn Sie daran interessiert sind, meine anderen Punktedateien zu sehen, habe ich sie auch auf GitHub.

Ich bin jedoch noch nicht mit meiner Befehlszeileneinrichtung fertig. Obwohl ich seit einiger Zeit keine Änderungen mehr vorgenommen habe, denke ich darüber nach, den Namen des aktuellen Benutzers (da ich dasselbe Thema auf meinem Server verwende) und einige RVM-Informationen anzugeben. Ich bin mir auch nicht sicher, warum ich das Wort git drin habe. Ich glaube, ich hatte ursprünglich ein Setup, das mit mehreren Versionskontrollsystemen funktioniert hat. Der Sinn all dessen ist jedenfalls, dass Sie dies ständig optimieren werden. Wenn ich Änderungen vornehme, werde ich sie sicher an GitHub senden, damit Sie sie dort sehen können.

Lassen Sie mich einige Links hinterlassen, die Sie beim Herumhacken in der Befehlszeile nützlich finden:

Viel Spaß!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.