Die als zsh bekannte Z-Shell ist eine Shell für Linux/Unix-ähnliche Betriebssysteme. Es hat Ähnlichkeiten mit anderen Shells im sh
(Bourne-Shell)-Familie wie bash
und ksh
, aber es bietet viele erweiterte Funktionen und leistungsstarke Bearbeitungsoptionen für die Befehlszeile, wie z. B. eine verbesserte Tab-Vervollständigung.
Es wäre unmöglich, hier alle Optionen von zsh abzudecken; Es gibt buchstäblich Hunderte von Seiten, die seine vielen Funktionen dokumentieren. In diesem Artikel präsentiere ich fünf Tipps, wie Sie die Verwendung der Befehlszeile mit zsh produktiver machen können.
1. Designs und Plugins
Im Laufe der Jahre hat die Open-Source-Community unzählige Themen und Plugins für zsh entwickelt. Ein Design ist eine vordefinierte Eingabeaufforderungskonfiguration, während ein Plug-in eine Reihe nützlicher Aliase und Funktionen ist, die die Verwendung eines bestimmten Befehls oder einer bestimmten Programmiersprache erleichtern.
Der schnellste Weg, um mit der Verwendung von Designs und Plugins zu beginnen, ist die Verwendung eines zsh-Konfigurationsframeworks. Es sind viele verfügbar, aber das beliebteste ist Oh My Zsh. Standardmäßig aktiviert es einige sinnvolle zsh-Konfigurationsoptionen und wird mit Hunderten von Designs und Plugins geladen.
Ein Design macht Sie produktiver, da es Ihrer Eingabeaufforderung nützliche Informationen hinzufügt, z. B. den Status Ihres Git-Repositorys oder der verwendeten Python-Virtualenv. Diese Informationen auf einen Blick zu haben, erspart Ihnen die Eingabe der entsprechenden Befehle, um sie zu erhalten, und es ist ein cooler Look. Hier ist ein Beispiel für Powerlevel9k, mein bevorzugtes Thema:
Zusätzlich zu den Themen bündelt Oh My Zsh unzählige nützliche Plugins für zsh. Wenn Sie beispielsweise das Git-Plug-in aktivieren, erhalten Sie Zugriff auf eine Reihe nützlicher Aliase, wie z. B.:
$alias | grep -i git | sortieren -R | head -10
g=git
ga='git add'
gapa='git add --patch'
gap='git apply'
gdt=' git diff-tree --no-commit-id --name-only -r'
gau='git add --update'
gstp='git stash pop'
gbda=' git branch --no-color --merged | Befehl grep -vE "^(\*|\s*(master|develop|dev)\s*$)" | Befehl xargs -n 1 git branch -d'
gcs='git commit -S'
glg='git log --stat'
Es sind Plugins für viele Programmiersprachen, Verpackungssysteme und andere Tools verfügbar, die Sie häufig auf der Befehlszeile verwenden. Hier ist eine Liste von Plugins, die ich in meiner Fedora-Workstation verwende:
git golang fedora docker oc sudo vi-mode virtualenvwrapper
2. Clevere Aliase
Aliasse sind in zsh sehr nützlich. Das Definieren von Aliasen für Ihre am häufigsten verwendeten Befehle erspart Ihnen viel Tipparbeit. Oh My Zsh konfiguriert standardmäßig mehrere nützliche Aliase, darunter Aliase zum Navigieren in Verzeichnissen und Ersetzungen für allgemeine Befehle mit zusätzlichen Optionen wie:
ls='ls --color=tty'
grep='grep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn}'Zusätzlich zu Befehlsaliasen ermöglicht zsh zwei weitere nützliche Aliastypen:den Suffix-Alias und der globale Alias .
Ein Suffix-Alias ermöglicht es Ihnen, die Datei, die Sie in die Befehlszeile eingeben, mit dem angegebenen Programm basierend auf der Dateierweiterung zu öffnen. Um beispielsweise YAML-Dateien mit vim zu öffnen, definieren Sie den folgenden Alias:
alias -s {yml,yaml}=vim
Wenn Sie nun einen beliebigen Dateinamen eingeben, der mit
yml
endet oderyaml
in der Befehlszeile öffnet zsh diese Datei mit vim:$ playbook.yml
# Öffnet die Datei playbook.yml mit vimMit einem globalen Alias können Sie einen Alias erstellen, der überall in der Befehlszeile erweitert wird, nicht nur am Anfang. Dies ist sehr nützlich, um allgemeine Dateinamen oder über Pipe geleitete Befehle zu ersetzen. Zum Beispiel:
alias -g G='| grep -i'
Um diesen Alias zu verwenden, geben Sie
G
ein überall würden Sie den Pipe-Befehl eingeben:$ ls -l G do
drwxr-xr-x. 5 rgerardi rgerardi 4096 Aug 7 14:08 Dokumente
drwxr-xr-x. 6 rgerardi rgerardi 4096 Aug 24 14:51 DownloadsSehen wir uns als Nächstes an, wie zsh beim Navigieren im Dateisystem hilft.
3. Einfache Verzeichnisnavigation
Wenn Sie die Befehlszeile verwenden, ist das Navigieren zwischen verschiedenen Verzeichnissen eine der häufigsten Aufgaben. Zsh erleichtert dies, indem es einige nützliche Verzeichnisnavigationsfunktionen bereitstellt. Diese Funktionen werden mit Oh My Zsh aktiviert, aber Sie können sie mit diesem Befehl aktivieren:
setopt autocd autopushd \ pushdignoredups
Wenn diese Optionen eingestellt sind, brauchen Sie
cd
nicht einzugeben Verzeichnisse zu wechseln. Geben Sie einfach den Verzeichnisnamen ein und zsh wechselt dorthin:$ pwd
/home/rgerardi
$ /tmp
$ pwd
/tmpUm zurückzugehen, geben Sie
-
ein :Zsh speichert den Verlauf der von Ihnen besuchten Verzeichnisse, sodass Sie schnell zu einem von ihnen wechseln können. Um die Liste anzuzeigen, geben Sie
dirs -v
ein :$ dirs -v
0 ~
1 /var/log
2 /var/opt
3 /usr/bin
4 /usr/local
5 /usr/lib
6 /tmp
7 ~/Projects/Opensource.com/zsh-5tips
8 ~/Projects
9 ~/Projects/ansible
10 ~/DokumenteWechseln Sie zu einem beliebigen Verzeichnis in dieser Liste, indem Sie
~#
eingeben wobei # die Nummer des Verzeichnisses in der Liste ist. Zum Beispiel:$ pwd
/home/rgerardi
$ ~4
$ pwd
/usr/localKombinieren Sie diese mit Aliasen, um die Navigation noch einfacher zu machen:
d='dirs -v | Kopf -10'
1='cd -'
2='cd -2'
3='cd -3'
4='cd -4'
5='cd -5'
6='cd -6'
7='cd -7'
8='cd -8'
9='cd - 9'Jetzt können Sie
d
eingeben um die ersten zehn Elemente in der Liste und die Nummer zum Wechseln zu sehen:$ d
0 /usr/local
1 ~
2 /var/log
3 /var/opt
4 /usr/bin
5 /usr/lib
6 /tmp
7 ~/Projects/Opensource.com/zsh-5tips
8 ~/Projects
9 ~/Projects/ansible
$ pwd
/usr/local
$ 6
/tmp
$ pwd
/tmpSchließlich erweitert zsh Verzeichnisnamen automatisch mit Tab-Vervollständigung. Geben Sie die ersten Buchstaben der Verzeichnisnamen und
TAB
ein um es zu benutzen:$ pwd
/home/rgerardi
$ p/o/z (TAB)
$ Projects/Opensource.com/zsh-5tips/Dies ist nur eine der Funktionen, die durch das leistungsstarke Tab-Vervollständigungssystem von zsh ermöglicht werden. Schauen wir uns noch ein paar mehr an.
4. Erweiterte Tab-Vervollständigung
Das leistungsstarke Vervollständigungssystem von Zsh ist eines seiner Markenzeichen. Zur Vereinfachung nenne ich es Tab-Vervollständigung, aber unter der Haube passiert mehr als eine Sache. Normalerweise gibt es eine Erweiterung und eine Befehlsvervollständigung. Ich werde sie hier gemeinsam besprechen. Einzelheiten finden Sie in diesem Benutzerhandbuch.
Die Befehlsvervollständigung ist standardmäßig mit Oh My Zsh aktiviert. Um es zu aktivieren, fügen Sie Ihrer
.zshrc
die folgenden Zeilen hinzu Datei:autoload -U compinit
compinitDas Vervollständigungssystem von Zsh ist intelligent. Es versucht, nur Elemente vorzuschlagen, die in bestimmten Kontexten verwendet werden können – zum Beispiel, wenn Sie
cd
eingeben undTAB
, zsh schlägt nur Verzeichnisnamen vor, da escd
kennt funktioniert mit nichts anderem.Umgekehrt schlägt es Benutzernamen vor, wenn benutzerbezogene Befehle ausgeführt werden, oder Hostnamen, wenn
ssh
verwendet wird oderping
, zum Beispiel.Es verfügt über eine umfangreiche Vervollständigungsbibliothek und versteht viele verschiedene Befehle. Zum Beispiel, wenn Sie
tar
verwenden Befehl können Sie die Tabulatortaste drücken, um eine Liste der Dateien anzuzeigen, die im Paket als Kandidaten für die Extraktion verfügbar sind:$ tar -xzvf test1.tar.gz test1/file1 (TAB)
file1 file2Hier ist ein fortgeschritteneres Beispiel mit
git
. In diesem Beispiel bei der Eingabe vonTAB
, vervollständigt zsh automatisch den Namen der einzigen Datei im Repository, die bereitgestellt werden kann:$ ls
original plan.txt zsh-5tips.md zsh_theme_small.png
$ git status
On branch master
Dein Branch ist mit 'origin/master '.
Änderungen, die nicht zum Festschreiben bereitgestellt wurden:
(verwenden Sie "git add...", um zu aktualisieren, was festgeschrieben wird)
(verwenden Sie "git checkout --...", um Änderungen im Arbeitsverzeichnis zu verwerfen)
geändert: zsh-5tips.md
keine Änderungen zum Commit hinzugefügt (verwenden Sie "git add" und/ oder "git commit -a")
$ git add (TAB)
$ git add zsh-5tips.mdEs versteht auch Befehlszeilenoptionen und schlägt nur diejenigen vor, die für den ausgewählten Unterbefehl relevant sind:
$ git commit - (TAB)
--all -a -- stellt alle geänderten und gelöschten Pfade bereit
--allow-empty -- erlaubt die Aufzeichnung eines leeren Commits
--allow -empty-message -- Aufnahme eines Commits mit einer leeren Nachricht zulassen
--amend -- Tipp des aktuellen Zweigs ändern
--author -- den im Commit verwendeten Autorennamen überschreiben
--branch -- branch-Informationen anzeigen
--cleanup -- angeben, wie die Commit-Nachricht bereinigt werden soll
--date -- das im Commit verwendete Autordatum überschreiben
-- dry-run -- zeigt nur die Liste der Pfade an, die festgeschrieben werden sollen oder nicht, und alle nicht verfolgten
--edit -e -- bearbeitet die Festschreibungsnachricht vor dem Festschreiben
--Datei -F -- Commit-Nachricht aus angegebener Datei lesen
--gpg-sign -S -- GPG-signiere den Commit--include -i -- aktualisiere die angegebenen Dateien und übertrage den gesamten Index
--interactive -- aktualisiere interaktiv Pfade in der Indexdatei
--message -m -- verwende die angegebene Nachricht als Commit-Nachricht
... TRUNCATED ...Nach der Eingabe von
TAB
, können Sie mit den Pfeiltasten durch die Optionsliste navigieren und die gewünschte Option auswählen. Jetzt müssen Sie sich nicht mehr all diese Git-Optionen merken.Es stehen viele Optionen zur Verfügung. Am besten finden Sie heraus, was für Sie am hilfreichsten ist, indem Sie es verwenden.
5. Befehlszeilenbearbeitung und Verlauf
Die Befehlszeilenbearbeitungsfunktionen von Zsh sind ebenfalls nützlich. Standardmäßig emuliert es Emacs. Wenn Sie wie ich vi/vim bevorzugen, aktivieren Sie vi-Bindungen mit dem folgenden Befehl:
$ bindkey -v
Wenn Sie Oh My Zsh verwenden, wird der
vi-mode
Das Plugin aktiviert zusätzliche Bindungen und eine Modusanzeige an Ihrer Eingabeaufforderung – sehr nützlich.Nachdem Sie vi-Bindungen aktiviert haben, können Sie die Befehlszeile mit vi-Befehlen bearbeiten. Drücken Sie zum Beispiel
ESC+/
um den Befehlszeilenverlauf zu durchsuchen. Drücken Sie während der Suchen
bringt die nächste übereinstimmende Zeile undN
Der vorherige. Die meisten gängigen vi-Befehle funktionieren nach dem Drücken vonESC
wie0
um zum Anfang der Zeile zu springen,$
um zum Ende zu springen,i
einfügen,a
anhängen usw. Sogar Befehle, denen Bewegung folgt, funktionieren, wiecw
um ein Wort zu ändern.Zusätzlich zur Befehlszeilenbearbeitung bietet zsh mehrere nützliche Befehlszeilenverlaufsfunktionen, wenn Sie zuvor verwendete Befehle reparieren oder erneut ausführen möchten. Wenn Sie beispielsweise einen Fehler gemacht haben, geben Sie
fc
ein bringt den letzten Befehl in Ihren bevorzugten Editor, um es zu beheben. Es respektiert den$EDITOR
Variable und verwendet standardmäßig vi.Ein weiterer nützlicher Befehl ist
r
, das den letzten Befehl erneut ausführt; undr <WORD>
, der den letzten Befehl ausführt, der die ZeichenfolgeWORD
enthält .Geben Sie abschließend Double Bangs (
!!
) bringt den letzten Befehl irgendwo in der Zeile zurück. Dies ist beispielsweise nützlich, wenn Sie vergessen haben,sudo
einzugeben So führen Sie Befehle aus, die erhöhte Berechtigungen erfordern:$ less /var/log/dnf.log
/var/log/dnf.log:Zugriff verweigert
$ sudo !!
$ sudo less /var/log/dnf.logDiese Funktionen erleichtern das Auffinden und Wiederverwenden zuvor eingegebener Befehle.
Wohin soll es von hier aus gehen?
Dies sind nur einige der zsh-Funktionen, die Sie produktiver machen können; Es gibt viele mehr. Weitere Informationen finden Sie in den folgenden Ressourcen:
Eine Einführung in die Z-Shell
Ein Benutzerhandbuch für ZSH
Archlinux-Wiki
zsh-Liebhaber
Haben Sie zsh-Produktivitätstipps zu teilen? Ich würde gerne in den Kommentaren unten davon erfahren.