Inhaltsverzeichnis

Wenn Deine Shell zur Arbeitsumgebung wird

Grundlage für die Command Line bei allen Linux- und Unix-Umgebungen ist die Shell.

Viele tippen ab und zu mal einen Befehl ein, aber man kann auf der Command-Line so viel mehr machen. Ich persönlich denke, dass viele sich mehr damit auseinander setzen sollten-. Es ist oftmals mehr möglich als in einer GUI. Am Ende braucht man die Kombination aus beiden.

Im letzten Beitrag ging es um das macOS Terminal, zwei Alternativen dazu und wie Du sie optisch etwas schöner machen kannst.

Jetzt kümmern wir uns sozusagen um den Inhalt des Terminals. Ich gehe davon aus, dass Du mindestens macOS Catalina hast. Ab Catalina ist zsh als Standard-Shell eingerichtet. Davor war es die Bash.

Mit zsh hast Du eine moderne Shell, die durch Erweiterungen zu einer richtigen Arbeitsumgebung ausgebaut wird. Mit ist kein besserer Begriff dafür eingefallen. Ich meine damit, dass Du alles hast, um schnell und effektiv darin zu arbeiten.

Antigen - Paketmanager für die zsh-Shell

Vor kurzem habe ich über Homebrew geschrieben. Ein Paketmanager für den Mac. Diesen werden wir auf der einen Seite nun auch wieder nutzen. Somit sich den Beitrag auch ansehen, da wir darauf aufbauen.

Auf der anderen Seite wäre es aber auch eine gute Idee, etwas in dieser Richtung für kleine Scripte und Erweiterungen für die Shell zu haben.

Antigen Antigen gibt es einen Paketmanager, genauer gesagt einen Pluginmanager für zsh. Mit ihm kannst Du sehr schnell die Shell mit vielen Funktionen erweitern und auch die Optik leicht ändern.

Gib im Terminal unteren Homebrew-Befehl ein, um Antigen zu installieren.

brew install antigen

Als nächstes brauchen wir eine Config für Antigen. Dazu muss Deine .zshrc erweitert bzw. erstellt werden. Nimm den Editor Deiner Wahl (meiner ist VIM) und bearbeite bzw. erstelle die Datei.

DEINEDITOR ~/.zshrc

Alternativ kannst Du das Verzeichnis auch mit open ~ öffnen. Wichtig ist nur dass die Datei mit auch wirklich .zshrc, also mit Punkt am Anfang und ohne ein .txt oder so am Ende bennant wird.

Dort kommt nun folgender Inhalt rein.

source $(brew --prefix)/share/antigen/antigen.zsh

# Load the oh-my-zsh's library.
antigen use oh-my-zsh

# Load bundles from external repos
antigen bundles <<EOBUNDLES
    zsh-users/zsh-autosuggestions
    zsh-users/zsh-syntax-highlighting
    zsh-users/zsh-completions
    git
EOBUNDLES

antigen theme robbyrussell

# 3. Commit Antigen Configuration
antigen apply

Das wäre eine Basis-Config von Antigen, in der bereits Oh My Zsh installiert wird, dazu noch drei Plugins und ein Theme für die Optik.

Mit der ersten Zeile wird Antigen geladen. Danach wird Oh My Zsh installiert und verwendet. Plugins werden mit antigen bundle PLUGINNAME installiert. Damit es etwas einfacher im Script zu pflegen ist und Du nicht mehrfach antigen bundle schreiben musst, gibt es antigen bundles <<EOBUNDLES, darin sind dann alle Plugins zur Installation aufgeführt.

Ich persönlich habe immer wieder das Problem, dass bei Ausführung des Script keine Fehler angezeigt werden. Somit könntest Du irgendwas reinschreiben und nicht merken, dass dies nicht geht. Neue Plugins würde ich deshalb zuerst mal direkt in der Shell z.B. über antigen bundle zsh-users/zsh-completions testen. Wenn alles funktioniert, dann den Pluginname in das Shell-Script übernehmen.

Die Namensgebung der Plugins ist an sich einfach. Steht nicht dabei, also nur der Name des Plugins, dann muss dieser von Oh My Zsh bereits mitgeliefert werden. Ein Beispiel ist git in oberer Liste.

Mit antigen theme robbyrussell wird die Standard-Optik von Oh My Zsh eingerichtet. Robby Russel ist der Entwickler von Oh My Zsh, daher der Name.

Nach dem speichern des Scripts, am einfachsten das Terminal beenden und neu starten. Dadurch wird Antigen das erste mal aktiviert und wird die Plugins automatisch installieren.

Oh My Zsh

Oh My Zsh ist ein Framework für zsh. Es bringt bereits viele Plugins mit. Man könnte nun das Tool auch ohne Antigen installieren. Antigen kann aber nicht nur Oh My Zsh installieren, sondern sich um dessen mitgelieferten Plugins kümmern, aber zusätzlich auch noch andere Plugins installieren.

Bei Antigen wird einfach das was bei Oh My Zsh unter plugins=( kommen würde in obere Plugin-Liste übernommen. Das ist der größte Unterschied zur direkten Installation. Auch musst Du bei Installation ohne Antigen, einiges in die .zshrc für Oh My Zsh schreiben. Das übernimmt alles Antigen für Dich.

Somit hat Antigen den Vorteil, dass Du sehr einfach Oh My Zsh bekommst und noch weitere Plugins damit installieren kannst.

Erste Schritte in der neuen Umgebung

Wenn Du die Configs aus dem letzten Beitrag übernommen hast und Antigen so wie oben aktiviert hast, sollte Dein neues Terminal (in meinem Fall Alacritty) ungefähr so aussehen.

Alacritty mit gruvbox, Antigen, Oh My Zsh und einigen aktiven Plugins.
Alacritty mit gruvbox, Antigen, Oh My Zsh und einigen aktiven Plugins.

In dem Screenshot sieht Du auch schon das Ergebnis der Plugins.

Das Theme robbyrussell

Al erstes wird Dir wohl der Prompt auffallen und die Farben beim Output von ls /. Dies kommt vom Theme. Er ist sehr minimaltisch. Ich mag diese komplett übertrieben Themes nicht so gerne, wo der ganze Bildschirm mit Akku, Uhrzeit und sonst was schon gefüllt ist.

Du kannst Dir mal die Liste der Themes ansehen. Einige benötigen besondere Schriftarten. Wenn Du die die Config von mir übernommen hast, solltest Du keine extra Schrift mehr installieren müssen.

Später werden wir noch ein anderes Theme installieren, dass Du dann nach Deinen Bedürfnissen anpassen kannst.

Das Plugin “zsh-syntax-highlighting”

Als nächstes siehst Du, die farblichen Unterscheidungen bei dem Echo-Befehl in oberen Screenshot. Der Name zsh-syntax-highlighting sagt ja schon, dass das Plugin sich um Syntax Hightlighting kümmert. In diesem Fall von zsh-Befehlen.

Vor allem lange Shell-Befehle werden damit sehr viel übersichtlicher und damit weniger anfällig für Tippfehler.

Das Plugin “zsh-autosuggestions”

Bei dem zweiten echo "hallo welt" im Screenshot habe ich nur ech eingegeben, die graue Schrift zeigt mir einen Vorschlag an. Mit Cursor nach rechts könnte ich den Vorschlag annehmen. Das ist sehr praktisch.

Wenn ich als weiteres Beispiel vimeingebe, wird in grau mir ein Vorschlag gemacht, was es sein könnte. Ich kann nun mit Cursor nach oben und unten weitere Vorschläge durchblättern.

Du findest bei zsh-autosuggestions auch viele Möglichkeiten wie sich das Tool verhalten soll.

Das Plugin “zsh-completions”

Dann habe ich noch das Plugin zsh-completions installiert. Es erweitert die bereits in zsh eingebaute Autocompletion. Laut der Webseite soll es, wenn ausreichend getestet, irgendwann in zsh direkt einfließen.

Wenn Du durch diese Erweiterung nun cd gefolgt mit der Tab-Taste eingibst kommt eine Anzeige der Möglichkeiten. Diese kannst Du dann mit Tab, optisch sehr einfach durchblättern. Ein Beispiel siehst Du auch in oberen Screenshot am Beispiel einer Befehlssuche lsa.

Das war nur der Anfang

Schneller Wechsel von Verzeichnissen mit “autojump”

Eines meiner liebsten Plugins ist Autojump.

Dazu musst Du Autojump installieren:

brew install autojump

Danach in .zshrc noch um autojump erweitern.

# Load bundles from external repos
antigen bundles <<EOBUNDLES
      zsh-users/zsh-autosuggestions
      zsh-users/zsh-syntax-highlighting
      zsh-users/zsh-completions
      git
      autojump
EOBUNDLES

Autojump merkt sich von Dir besuchte Verzeichnisse in der Shell in einer kleinen Datenbank. Du kannst mit j dann sehr schnell in diesen Verzeichnissen wechseln.

❯ j schi
/Users/tom/icloud/dev/hugo/schimana.net
❯ j 2021
/Users/tom/icloud/dev/hugo/schimana.net/content/blog/2021
❯ j bin
/Users/tom/bin
~/bin ❯
❯ j zsh-
/Users/tom/icloud/dev/hugo/schimana.net/content/blog/2021/zsh-antigen-ohmyzsh-erweitern
~/i/d/h/schimana.net/c/b/2021/zsh-antigen-ohmyzsh-erweitern ❯

In oberen Beispiel springe ich mit j von meinem Home-Verzeichnis direkt in mein Projekt von meinen Blog. Dann in das Jahr 2021 für die Blog-Beiträge und am Ende in mein persönliches bin, wo ich meine selbstgeschrieben Scripte abgelegt habe. Am Ende gehe ich direkt in das Verzeichnis von diesem Blog-Beitrag.

Nicht über den Prompt wundern. Ich habe Powerlevel10k aktiviert. Das erkläre ich Dir weiter unten.

Du kannst auch direkt ein Verzeichnis im Finder öffnen.

~ ❯ jo zsh-

Damit bleibst Du in der Shell in Deinem Home, aber im Finder öffnet sich direkt das Verzeichnis von meinem Blog-Beitrag.

Ich schreibe meine Blogbeiträge mit Markdown. Diese werden mit Hugo dann in statische Seiten umgewandelt. Nur falls Du Dich wunderst, warum ich Verzeichnisse von meiner Webseite auf der lokalen Platte habe.

Weitere Befehle findest Du auf der Webseite von Autojump.

Taschenrechner in der Shell?

Erweitere die Bundles um arzzen/calc.plugin.zsh. Damit hast Du einen Taschenrechner direkt in der Shell.

Einfach mit = anfangen und danach eingeben, was Du ausrechnen willst.

= 2048/12
170
~ ❯

Schneller arbeiten mit Git

In Deiner Bundle-Liste von Antigen ist auch git enthalten. Es wird von Oh My Zsh mitgeliefert. Deshalb nur der Plugin-Name. Wenn Du Dich bei den anderen Plugins wunderst, wie die Namen zusammengestellt sind. Dies sind die Usernamen der Github-Seiten. Damit hat Anitgen die Info, dass er das Plugin dort suchen muss.

Der Umfang an Kommandos für Git ist viel zu lange, als das ich ihn hier aufführen könnte. Auf der Projektseite kannst Du Dir die Liste ansehen.

Powerlevel10k

Wenn Dir die Möglichkeiten von dem oberen Theme zu wenig sind, Du aber auch nicht ewig unterschiedliche installieren willst, dann empfehle ich Dir Powerlevel10k. Es ist nicht nur ein Theme, sondern es liefert Dir unzählige Möglichkeiten die Optik anzupassen.

Powerlevel10k hat zahlreiche Möglichkeiten die Optik anzupassen.
Powerlevel10k hat zahlreiche Möglichkeiten die Optik anzupassen.

Die Installation ist recht einfach. Du musst nur in .zshrc das Theme austauschen:

#antigen theme robbyrussell
antigen theme romkatv/powerlevel10k

Nach der ersten Aktivierung sollte Dir ein Wizard angeboten werden. Ansonsten kannst Du diesen mit p10k configure starten. Er geht mit Dir alle Möglichkeiten durch und Du kannst damit Deine Shell optisch sehr einfach modifizieren. Ich wiederhole mich. Du solltest die Config für Terminal und co. von mir verwenden, da diese Schrift auch schon für P10k optimiert ist.

Das Tool wird auch Deine .zshrc modifizieren, damit diese schneller startet. Das ist auch ein Grund, warum ich bei mir keine Textausgabe beim Start der Shell, wie z.B. neofetsch verwende. Dies würde sich mit dem schnellen Start beißen.

Für die VI-Fans

Wenn Du, so wie ich, auch ein Fan von vi, VIM und Neovim bist, dann habe ich noch ein tolles Plugin für Dich. Zsh hat bereits einen VI-Modus. Diesen kannst Du in .zshrc aktivieren, in dem Du die Zeile bindkey -v einfügst.

Mit VIM-Mode kann Du Dir diesen Befehl nicht nur sparen, sondern auch erweitern.

Wie musst Du Deine .zshrc entsprechend erweitern. Diese sollte in etwa so aussehen.

# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
  source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi

source $(brew --prefix)/share/antigen/antigen.zsh

# Load the oh-my-zsh's library.
antigen use oh-my-zsh

# Load bundles from external repos
antigen bundles <<EOBUNDLES
    zsh-users/zsh-autosuggestions
    zsh-users/zsh-syntax-highlighting
    zsh-users/zsh-completions
    softmoth/zsh-vim-mode
    autojump
    git
    arzzen/calc.plugin.zsh
EOBUNDLES

#antigen theme robbyrussell
antigen theme romkatv/powerlevel10k

# 3. Commit Antigen Configuration
antigen apply

# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh

Der erste und letzte Block kommt durch das Setup von Powerlevel10k.

Durch das Plugin hast Du in Deiner Shell nun VI-Funktionen enthalten. Du kannst in einer Zeile die ESC-Taste drücken und bist dann im VI-Modus. Da gehen die Standard-Tastenkürzel und -Befehle von VI. Also ESC und 0 springt an den Anfang einer Zeile, mit $ an das Ende. Mit / kannst Du suchen.

Noch zwei Tipps

Wenn Antigen mal nicht so willig ist, dann helfen diese beiden Befehle:

Sollte Antigen neue Plugins nicht installieren bzw. Änderungen in der zshrc ignorieren:

antigen reset

Damit der interne Cache neu gebaut wird:

antigen cache-gen

Wie gehts weiter?

Spiel mit Antigen und den Tools mal etwas rum. Schau Dir vor allem die Seiten von Oh My Zsh und co. mal genauer an. Hier konnte ich gar nicht so tief eingehen. Aber dafür gibt es ja die guten Projektseiten auf Github Ich habe wirklich nur an der Oberfläche gekratzt.

Als nächstes werden mit und tmux genauer ansehen. Damit bauen wir weiter an der Shell und dessen Möglichkeiten.

Wenn Du Fragen oder Anregungen hast, schreib mir mit unterer Kommentarfunktion. Ich freue mich über Dein Feedback.