Ich bin einer jener Leute, die sofort ein Terminalfenster öffnen, nachdem mein Computer hochgefahren ist. Es ist nicht aus der Notwendigkeit an dieser Stelle, aber die Gewohnheit ist da. Ich habe den größten Teil meiner Karriere damit verbracht, die magischen Beschwörungen zu lernen, und ich finde, dass das Navigieren durch meine täglichen Aufgaben am Terminal einen angenehmeren Arbeitstag ermöglicht. Das alles gesagt, es ist schön, ab und zu etwas Neues auszuprobieren.
Ich habe kürzlich den Standard-Befehlszeileninterpreter Bash zugunsten von fish losgelassen, der sich stolz als „Befehlszeilenshell für die 90er Jahre“ vermarktet.
Das habe ich gefunden.bashrc ist nicht genug
Vor etwas mehr als einem Jahr habe ich beschlossen, meine Betriebssysteme nicht mehr zu abstrahieren und von Grund auf neu zu lernen. Ich bin kürzlich von Mac zu Linux gewechselt, was mir einen Grund gab, meine Dotfiles in die neue Umgebung zu portieren. Es war erfrischend; Ich fand eine Menge verwirrender Verknüpfungen und Duplikate und paarte sie auf etwas, das gut zwischen Betriebssystemen portiert. Hier sind ein paar Favoriten:
## Nicer shell experience
export GREP_OPTIONS="--color=auto"; # make grep colorful
export LSCOLORS=gxfxbEaEBxxEhEhBaDaCaD; # make ls more colorful as well
export HISTSIZE=32768; # Larger bash history (allow 32³ entries; default is 500)
export HISTFILESIZE=$HISTSIZE;
export HISTCONTROL=ignoredups; # Remove duplicates from history. I use `git status` a lot.
export HISTIGNORE="ls:cd:cd -:pwd:exit:date:* --help"; # Make some commands not show up in history
export LANG="en_US.UTF-8"; # Language formatting is still important
export LC_ALL="en_US.UTF-8"; # byte-wise sorting and force language for those pesky apps
export MANPAGER="less -X"; # Less is more
export GPG_TTY=$(tty); # for gpg key management
Ich war auf einer Reise, um die Magie meiner Umgebung zu entmystifizieren, und es fängt an, mehr Sinn zu machen.
Anpassung bricht meine .bashrc
An diesem Punkt der Klarheit bin ich wieder stecken geblieben. Ich möchte einige moderne Konventionen in meinem Terminal, insbesondere automatische Vorschläge, Syntaxhervorhebung und Einfärbung von Befehlsausgaben ohne zu viele Abhängigkeiten, und ich möchte, dass diese Konfiguration unabhängig von dem Befehlszeileninterpreter ist, den ich ausführe. (iTerm2 ist großartig auf einem Mac, aber ich möchte seine kryptische Konfigurationsdatei nicht in meinen dotfiles verfolgen.) Also, was soll ich tun?
Als ich das erste Mal nach einer Antwort suchte, löste ich sie Schritt für Schritt:
- Zuerst habe ich mein ~/ angepasst.inputrc Datei für Vorwärts- und Rückwärtssuche zu ermöglichen.
- Dann ersetzte ich cat durch die verschönerte Ausgabe von ccat und aliased cat zu ccat in my .in: bashrc. Dies brach später in einigen Fällen das Schreiben in stdout , also hörte ich auf, es zu benutzen.
- Letztendlich habe ich Bash-it verwendet, ein leistungsstarkes Plugin-System zum Anpassen von Bash.
Nachdem ich die Teile einzeln abgezogen hatte, hatte ich das Gefühl, ein bisschen mehr darüber verstanden zu haben, wie mein System lief. Die Reifen, durch die ich springen musste, um die moderne Erfahrung zu machen, die ich suchte, führten mich zurück zu den Standards, die mich an diesen Punkt brachten. Ich fühlte mich wie ein Gefangener der Geschichte, bis ich beschloss, alles wegzuwerfen und etwas völlig anderes auszuprobieren.
Einfache Standardeinstellungen und Anpassung mit Fish shell
Fish shell ist eine moderne Befehlszeilenschnittstelle mit automatischen Vorschlägen, Tabulatorvervollständigung und Syntaxhervorhebung (unter anderem). Besonders gut gefällt mir, wie Sie vom ersten Mal an, wenn Sie es mit fish versuchen, eine schöne Erfahrung machen:
In der ersten Zeile ist der Befehl blau, da pwd ein gültiger Befehl ist. In der zweiten Zeile ist es rot, weil pdw kein gültiger Befehl ist. Ich drückte die Eingabetaste, um zu zeigen, dass es wahr ist, aber ich hätte den Fehler schnell korrigieren und mit meinem Tag fortfahren können. Im dritten Befehl möchte ich das Verzeichnis (cd) in meinen Entwicklungsordner ändern, und fish fragt automatisch, ob ich wie beim letzten Mal in meine Dotfiles springen möchte. Wenn ich zweimal auf Tab drücke, werden andere Optionen im selben Verzeichnis angezeigt, genau wie erwartet.
Wenn ich mein Fish Shell-Erlebnis anpassen möchte, muss ich dazu keine zusätzliche Bibliothek oder ein Framework installieren. Fish wird mit dem Befehl fish_config ausgeliefert, der eine grafische Benutzeroberfläche (GUI) startet, in der Sie verschiedene Farben und Eingabeaufforderungskonfigurationen auswählen können.
Noch beeindruckender ist, dass Sie alle verfügbaren Funktionen, Variablen, Bindungen und mehr auch über die Benutzeroberfläche überprüfen können:
Wenn Sie Ihre Konfiguration optimieren, werden alle Anpassungen an derselben Stelle gespeichert: ~/ .config/Fisch. Der Screenshot oben zeigt, dass ich eine benutzerdefinierte Funktion erstellt habe, mit der ich eine Python-Umgebung mit pyenv einfach aktivieren kann. Schauen Sie sich das Tutorial zu Fischfunktionen an, um mehr zu erfahren.
Seien Sie gewarnt: fish ist nicht wie Bash
Beim Ausprobieren anderer Shells stellte ich fest, dass es immer ein paar Unterschiede gab, die ich einstellen musste, aber sie fühlten sich insgesamt vertraut an. Dies ist bei Fischen nicht der Fall. Funktionsdefinition, Aliasing und Variablen funktionieren alle etwas anders. Es gibt hilfreiche Strategien zum Konvertieren .bashrc und .bash_profile Dateien in Fischkonfiguration, aber es ist mehr, als ich in diesem Artikel decken. Also, während ich gewachsen bin, um Fisch zu lieben, empfehle ich, das interaktive Tutorial für eine Spritztour zu nehmen, um zu sehen, ob es Ihnen gefällt.
Probieren Sie fish für eine schöne Standard-Shell aus
Ich genieße es, meinen Tag mit dem Öffnen des Terminals zu beginnen, und ich genieße es noch mehr, seit ich zur Fischschale gewechselt bin. Es hat mir erlaubt, mich nicht mehr darum zu kümmern, was in Bash ist, sondern mich darauf zu konzentrieren, welchen Code ich schreiben möchte. Wenn Sie sich vom Basteln an Ihrem Terminal entfernen und sich mehr auf Code konzentrieren möchten, probieren Sie es aus. Verwenden Sie chsh, um es als Standard-Shell festzulegen, und lassen Sie mich in den Kommentaren wissen, wie es geht.