So passen Sie Ihr Terminal an

In letzter Zeit habe ich häufig diese Frage bekommen: „Wie haben Sie Ihr Terminal so aussehen lassen, wie es aussieht?“ Wenn Sie mein Terminal bemerkt haben und neugierig sind, wie ich es eingerichtet habe, ist dies die Anleitung für Sie ! Natürlich reicht das, was Sie hier lernen, auch aus, um Ihre eigene benutzerdefinierte Eingabeaufforderung zu erstellen!


Premium-exklusiver Screencast



Geschriebenes Tutorial

Bevor wir anfangen, möchte ich etwas sehr klar machen. Ich bin sicherlich ein Kommandozeilenenthusiast, aber ich bin überhaupt kein Kommandozeilenprofi. Ich fühle mich in einem Terminal zu Hause, aber ich bin weit davon entfernt, alles zu wissen. Hier ist 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. Es gibt einige Dinge, die so sind, nur weil es funktioniert… und ich weiß nicht immer, warum.

Wenn der Haftungsausschluss nicht zur Verfügung steht, wollen wir sehen, was wir tun.


Treffen des fertigen Produkts

So sieht meine Eingabeaufforderung aus:


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

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

Vorbereiten der Umgebung

Lassen Sie uns jetzt ein paar vorläufige Stücke zusammenstellen, bevor Sie tatsächlich einige Shell-Skripte schreiben.

Erstens gibt es das Farbschema. Sie könnten es als das Farbschema Solarized von Ethan Schoonover 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 Seite Solarized GitHub beachten, damit dies funktioniert, wenn Sie noch unter diesem Betriebssystem arbeiten.

Wenn Sie zu Lion übergegangen sind, können Sie das einfach installieren .Terminal Dateien, die Sie im Ordner xterm-256color finden. Sobald Sie diese installiert haben (doppelklicken Sie einfach darauf), sollten Sie in der Lage sein, den gewünschten in den Terminal-Einstellungen auszuwählen. Vergessen Sie nicht, es als Standardschema festzulegen.


Als nächstes 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 enthält, wie zum Beispiel eine bessere Tab-Vervollständigung. So gehen Sie vor: Öffnen Sie die Mac-Systemeinstellungen und gehen Sie zu "Benutzer & Gruppen". Entsperren Sie den Bereich, indem Sie auf das Schloss am unteren Rand klicken und Ihr Kennwort 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 Schrift. Ich verwende Inconsolata bei 15pt. Es ist eine kostenlose Monospace-Schriftart, die ich den ganzen Tag gerne anstarren möchte. (Neben der Verwendung im Terminal verwende ich sie auch in Vim und TextEdit.) Sie können Ihre Standardschriftart in den Terminal-Voreinstellungen festlegen, genau dort, wo Sie das Farbschema auswählen.

Eine weitere kleine Sache ist die Größe Ihres Fensters: Öffnen Sie Terminaleinstellungen> Einstellungen und klicken Sie auf die Registerkarte Fenster. Teilweise nach unten können Sie die Anzahl der gewünschten Spalten und Zeilen auswählen. Ich verwende 130 Spalten zu 30 Zeilen.

Batterie

Erinnern Sie sich an die Batteriestandsanzeige? Nun, das erfordert ein kleines Skript vom Entwickler Steve Losh. Kopieren Sie das einfach in eine Datei und speichern Sie es als Python-Datei. schon seit ~ / bin ist in meinem terminal PFAD, Ich habe die Datei in gespeichert ~ / bin / batcharge.py. Wie er feststellt, funktioniert dieses Skript nur unter Mac OS X. Wenn Sie zsh auf einem anderen System ausführen, müssen Sie diesen Teil auslassen.

Zsh

Zu guter Letzt gibt es noch oh-my-zsh. Laut dem Github-Repo ist dies nur "Eine Handvoll Funktionen, automatisch vervollständigende Helfer und Dinge, bei denen Sie" OH MY ZSHELL! "Rufen müssen."

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 bisschen herum, wenn Sie etwas Zeit haben. Sie könnten überrascht sein, was Sie finden werden. Die Installation von oh-my-zsh ist ziemlich einfach: Folgen Sie einfach den Installationsanweisungen in der Readme-Datei. Sie sind ziemlich unkompliziert.

Jetzt haben wir alle notwendigen Teile. Wir können jetzt mit der Erstellung unseres benutzerdefinierten Terminals beginnen.


Erstellen der Dateien

Bei der Installation von oh-my-zsh wurde es installiert ~ / .oh-my-zsh. Pop das offen. Sie sehen zwei Notizordner: themen und Vorlagen. Innerhalb Vorlagen, Sie finden eine Datei namens zshrc.zsh-template Dies ist eine Vorlage für Sie ~ / .zshrc Datei. Wenn Sie Ihr Terminal bereits zuvor angepasst haben, wissen Sie, dass die .bashrc In dieser Datei werden Ihre Anpassungen gespeichert, wenn Sie eine Bash-Shell verwenden. Das .zshrc ist dasselbe, abgesehen von der zsh-Shell. Öffnen Sie also die Vorlagendatei. Sie müssen nicht wissen, was genau vor sich geht. Schließlich enthält die Datei viele Kommentare, die möglicherweise nicht sinnvoll sind. Eine Sache ist hier wichtig zu verwenden. Beachten Sie die folgende Zeile:

ZSH_THEME = "Robbyrussell"

Dies ist der Name des Themas, das Ihr Terminal verwendet. Schau in den themen Ordner: Sie sehen ein robbyrussel.zsh-theme Datei. Was wir tun werden, ist ein eigenes Theme zu erstellen, so dass Sie diese Zeichenfolge durch den Namen unserer neuen Datei ersetzen können. Ich habe meinen "Doppelend" unkreativ genannt, weil er auf beiden Seiten des Terminals eingestiegen 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, check out oh-mein-zshPlugins (in der Plugins Ordner): eine Menge nützliches Zeug.

Vergiss nicht zu kopieren zshrc.zsh-template zu Ihrem Home-Verzeichnis und benennen Sie es in um .zshrc bevor Sie Ihre Änderungen vornehmen. Jetzt in der themen In diesem Ordner erstellen Sie eine Datei mit dem von Ihnen festgelegten Designnamen .zshrc Datei. Stellen Sie sicher, dass Sie es geben .zsh-theme Erweiterung. Wir sind bereit, unser eigenes Thema zu erstellen.


Benutzerdefiniertes Design erstellen

Das wichtigste in Ihrer Theme-Datei ist das PROMPT Variable. Der Inhalt ist Ihre Eingabeaufforderung. Beginnen Sie einfach damit in Ihrer Designdatei:

PROMPT = 'myPrompt =>'

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


Okay, lass uns an die Arbeit gehen. Wir müssen mehrere Funktionen schreiben, beginnen aber mit der PROMPT Variable. Beim Betrachten des Terminals ist es möglicherweise nicht auffällig, aber es gibt eigentlich drei Zeilen zu meiner Eingabeaufforderung. Die erste ist eine leere Zeile, nur um etwas Raum zum Atmen zu geben. Die zweite enthält alle Informationen und die dritte den Pfeil. In dieser dritten Zeile geben Sie den Befehl tatsächlich ein. Also hier ist unser Start:

PROMPT = '$ reset_color →'

Ja, Sie können mehrzeilige Zeichenfolgen in Shell-Skripts erstellen. Aber was ist los mit? $ reset_color? 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 umwandelt. Natürlich gibt es für jede verfügbare Farbe einen Code. Mach dir keine Sorgen, es gibt andere Variablen für die anderen Farben; Sie müssen die Codes nicht lernen. Wenn wir jedoch zur dritten Zeile kommen, möchten wir diese auf die Standardtextfarbe zurücksetzen. also benutzen wir die $ reset_color Variable.

Wenn Sie sich für das Pfeilzeichen interessieren, handelt es sich um den Rechtspfeil nach rechts (U + 2192, →). Das ist alles.

Nun sieht unsere Aufforderung so aus:


Schauend aussehend. Fügen wir nun den Computernamen und das Arbeitsverzeichnis hinzu. Dies ist alles für die zweite Zeile unseres PROMPT Variable.

$ fg [cyan]% m: $ fg [gelb] $ (get_pwd)

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

Nach dem Einstellen der Farbe haben wir % m Dies gibt den Namen des Computers aus. Nach dem Doppelpunkt und dem Leerzeichen setzen wir die Textfarbe auf Gelb. Als Nächstes verwenden wir das Dollarzeichen und die Parens, um die Ausgabe der Funktion hinzuzufügen get_pwd. Dies wird unser aktuelles Arbeitsverzeichnis ausgeben, wir haben eine kleine Drehung. Wenn ich im Heimatverzeichnis bin, möchte ich nicht sehen / Benutzer / andrew, Ich möchte sehen ~ stattdessen. Also hier ist diese Funktion:

Funktion get_pwd () echo "$ PWD / $ HOME / ~"

Die Funktionsshell ist ziemlich einfach, wenn Sie bereits JavaScript geschrieben haben. identische Syntax. Ich bin nicht sicher, wo diese Suchen-und-Ersetzen-Syntax ihren Ursprung hatte, aber das sieht der Vim-Such-und-Ersetzen-Syntax ziemlich ähnlich: If PWD enthält den Text $ HOME (eine Systemvariable für Ihr Home-Verzeichnis), ersetzen Sie diese durch ~.

Nun, was ist los?


Gut! Nun kommt der knifflige Teil. Sie sehen, ich möchte die Git-Informationen und die Akkuanzeige nach rechts ausrichten. Da es keine Möglichkeit gibt, die Ausrichtung nach rechts vorzunehmen, 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 anrufe get_spacing. So hinzufügen $ (get_spacing) bis zum Ende unserer zweiten Zeile, so sieht es jetzt so aus:

$ fg [cyan]% m: $ fg [gelb] $ (get_pwd) $ (put_spacing)

Nun, diese Funktion. Natürlich ist hier die Schale:

Funktion put_spacing () 

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

local git = $ (git_prompt_info) wenn [$ # git! = 0]; dann ((git = $ # git - 10)) sonst git = 0 fi

Wir beginnen mit der Ausgabe von der git_prompt_info Funktion und Speichern in einer lokalen Variablen, git. Wenn die Länge dieser Zeichenfolge nicht 0 ist, setzen wir sie zurück git das ist also jetzt die Länge des Strings minus 10. Ansonsten setzen wir zurück git bis 0. Dies scheint nicht sehr sinnvoll zu sein, bis Sie erkennen, was wir hier versuchen. Wir möchten herausfinden, wie viele Zeichen "Slots" die Git-Informationen beanspruchen. Der schwierige Teil ist, dass wir die Variable wiederverwenden git: Zuerst enthält es die Zeichenfolge, dann die Zahl, die die Anzahl der Zeichen angibt, die unsere Git-Info lang ist. Ob git ist null Zeichen lang, setzen wir git bis 0; Wenn dies nicht der Fall ist (dh wir befinden uns in einem Git-Repository), setzen wir git Die Anzahl der Zeichen in der Zeichenfolge minus 10. Dies liegt daran, dass die Anzahl der Zeichenfolgen die Farbcodes enthält, die nicht sichtbar sind und daher keine Breite beanspruchen. Die doppelten parens? Oh, sie werden für Mathe benutzt.

Das Gleiche tun wir für die Batterieausgabe:

local bat = $ (battery_charge) wenn [$ # bat! = 0]; dann ((bat = $ # bat - 18)) sonst bat = 0 fi

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

lokale Termbreite ((termwidth = $ COLUMNS - 3 - $ # HOST - $ # $ (get_pwd) - $ bat - $ git))

Ein bisschen mehr Mathe: Wir beginnen mit SÄULEN, Dies ist die Anzahl der Zeichen, die das Terminal groß ist. Wir subtrahieren alle entsprechenden Werte (die 3 steht für zwei Leerzeichen und einen Doppelpunkt), und wir erhalten die Tatsache, dass wir dies benötigen Termbreite Anzahl der Leerzeichen zwischen dem linken und rechten Teil der Eingabeaufforderung.

Lassen Sie uns nun eine Zeichenfolge erstellen Termbreite Anzahl der Leerzeichen:

lokal für i in 1… $ termwidth; do Abstand = "$ Abstand" Echo $ Abstand

Eine einfache for-in-Schleife ermöglicht das Erstellen der Zeichenfolge. dann geben wir es zurück.

Man kann nicht wirklich sagen, dass der Leerraum hinzugefügt wurde. Ich habe also einen Dummy-Text hinzugefügt, damit man sehen kann, dass er hinzugefügt wurde.


Als nächstes die Git-Info. Wir fügen hinzu $ (git_prompt_info) bis zum Ende der Eingabeaufforderung Zeile 2; Wie Sie wissen, ist das ein Funktionsaufruf.

$ fg [cyan]% m: $ fg [gelb] $ (get_pwd) $ (put_spacing) $ (git_prompt_info)

Beachten Sie, dass wir die Farbe nicht ändern, bevor Sie die Git-Informationen geladen haben. Die Funktion kümmert sich darum, da dies vom Repository-Status abhängt.

Und hier ist die Funktion:

Funktion git_prompt_info () ref = $ (git symbolisch-ref HEAD 2> / dev / null) || return echo "$ (parse_git_dirty) $ ZSH_THEME_GIT_PROMPT_PREFIX $ (current_branch) $ ZSH_THEME_GIT_PROMPT_SUFFIX"

In der ersten Zeile wird nur geprüft, ob wir uns in einem Git-Repository befinden. Wenn wir nicht sind Rückkehr. Wenn wir sind, die nächste Zeile Echodie richtige Info heraus. Beachten Sie hier zwei Dinge: Zunächst verwenden wir zwei Variablen: $ ZSH_THEME_GIT_PROMPT_PREFIX und $ ZSH_THEME_GIT_PROMPT_SUFFIX. Ich zeige Ihnen, wie diese in einer Sekunde definiert werden. Die andere Sache sind zwei andere Funktionen, die aufgerufen werden. Diese werden von oh-my-zsh bereitgestellt. Das current_branch Funktion gibt nur den aktuellen Zweig zurück. Das parse_git_dirty ist aber interessanter. Wenn der aktuelle Zweig fehlerhaft ist (nicht festgeschriebene Änderungen hat), gibt die Funktion das aus $ ZSH_THEME_GIT_PROMPT_DIRTY; Andernfalls wird es ausgegeben $ ZSH_THEME_GIT_PROMPT_CLEAN.

Ich habe diese vier Variablen wie folgt definiert:

ZSH_THEME_GIT_PROMPT_PREFIX = "[git:" ZSH_THEME_GIT_PROMPT_SUFFIX = "] $ reset_color" ZSH_THEME_GIT_PROMPT_DIRTY = "$ fg [rot] +" ZSH_THEM_GIT_PRO "".

Basierend auf diesen Variablen wird ein Repo auf einem sauberen Master-Zweig ausgegeben [git: master] in grün; ein schmutziger Master-Zweig wird ausgegeben +[git: master].

Und zum Schluss nennen wir das Akku-Ladung Funktion:

$ fg [cyan]% m: $ fg [gelb] $ (get_pwd) $ (put_spacing) $ (git_prompt_info) $ (battery_charge)

Hier ist die Akku-Ladung Funktion:

function battery_charge () wenn [-e ~ / bin / batcharge.py], dann echo 'python ~ / bin / batcharge.py' else echo "; fi

Wenn die Datei vorhanden ist, führen wir diese Datei aus und geben die Ausgabe zurück. Beachten Sie, dass wir die Backticks für die Ausführung der Datei verwenden (dies sind keine einfachen Anführungszeichen): Dies ermöglicht uns, eine Codefolge so auszuführen, als wäre sie im Terminal. Wenn die Datei nicht existiert, wird nur eine leere Zeichenfolge ausgegeben.

Und damit sind wir fertig! Hier enden wir mit:



Fazit

Nun, so sieht mein Terminal aus. Ich habe das Oh-my-zsh-Projekt auf GitHub gegabelt und dieses Design hinzugefügt, damit Sie es dort finden können. Wenn Sie sich für meine anderen Dotfiles interessieren, habe ich sie auch auf GitHub.

Ich bin jedoch noch nicht fertig mit der Einrichtung der Befehlszeile. Obwohl ich seit einiger Zeit keine Änderungen vorgenommen habe, denke ich daran, den Namen des aktuellen Benutzers (weil ich dasselbe Thema auf meinem Server verwende) und auch einige RVM-Informationen einzufügen. Ich bin mir auch nicht sicher, warum ich das Wort habe git da drin; Ich schätze, ich hatte ursprünglich ein Setup, das mit mehreren Versionskontrollsystemen funktionierte. Wie auch immer, der Punkt bei all dem ist, dass Sie dies ständig verbessern werden. Wenn ich Änderungen vornehme, werde ich sie sicher auf GitHub übertragen, damit Sie sie dort sehen können.

Lassen Sie mich einige Links hinterlassen, die Sie beim Hacken auf der Kommandozeile hilfreich finden:

  • 7 Einfache und nützliche Befehlszeilentipps | Nettuts+
  • 10 Terminalbefehle zur Steigerung Ihrer Produktivität | Nettuts+
  • Anpassen der Eingabeaufforderung | Nettuts+
  • Beschleunigen Sie Ihren Workflow im Terminal | Nettuts + Premium
  • Steve Losh: Mein extravaganter Zsh Prompt
  • Peepcode Blog Post: Meine Eingabeaufforderung
  • Peepcode: Treffen Sie die Kommandozeile ($ 12)
  • Peepcode: Erweiterte Befehlszeile ($ 12)
  • Phil's Zsh Prompt
  • Bash Prompt HOWTO
  • Oh-my-zsh-Themes-Wiki-Seite (Sie können auf diese Bilder verweisen, wenn Sie die Motive in der themen Mappe; Sie erhalten auf diese Weise einige nützliche Tipps.)
  • Natürlich führt eine Websuche nach Begriffen wie "bash if statement" oder "bash for loop" zu hilfreichen Ergebnissen, wenn Sie nur lernen. Denken Sie daran, da zsh ziemlich vollständig mit bash kompatibel ist, sollten alle von Ihnen verwendeten bash-Skript-Schnipsel in einer zsh-Eingabeaufforderung gefunden werden.

Habe Spaß!