Welche zsh-Funktionen verwenden Sie?

10770
Frew Schmidt

Ich arbeite viel im Terminal, also habe ich viel über meine bevorzugte Shell, zsh, gelernt. Welche Funktionen von zsh nutzen Sie, um sich bei der Arbeit wesentlich produktiver zu machen? Einer meiner Favoriten ist der Autovervollständiger für mehrere Verzeichnisse. Anstatt zu tippen, cd /fo/ba/bakann ich also einfach so cd /fo/ba/baviele Tastenanschläge speichern und speichern!

32
Ich wusste nichts über dieses Feature, ich muss es ausprobieren! Roy Rico vor 14 Jahren 2
Welche Option ist das Verzeichnis automatisch vervollständigen? hometoast vor 14 Jahren 1

6 Antworten auf die Frage

48
Agnel Kurian

Ich habe gerade dieses kleine Juwel gefunden:

cd old new 

Diese Form von cdersetzt alle Vorkommen oldim vollständigen Pfad des aktuellen Verzeichnisses mitnew und versucht, das Arbeitsverzeichnis in den resultierenden Pfad zu ändern.

Wenn Ihr Arbeitsverzeichnis beispielsweise lautet /home/larry/code/backrub/serverund Sie zu diesem wechseln möchten, /home/sergei/code/backrub/servermüssen Sie lediglich Folgendes tun:

cd larry sergei 
Ok, das regelt. hometoast vor 14 Jahren 7
21
Gilles

Ich werde mich an Dinge halten, die Bash, soweit ich weiß, nicht kann.

  • Phantasie Abschluss. Ja, bash hat etwas davon, aber zsh kennt mehr Befehle, ist oft genauer und hat viele weitere Konfigurationsmöglichkeiten.

  • Der **Glob **/foosucht z. B. foorekursiv nach Dateien, die in Unterverzeichnissen aufgerufen werden. (Und ***/foofolgt auch symbolischen Links.) Zwei Zeichen anstelle eines langen findBefehls (was schwer zu finden ist, wenn einige Dateinamen Sonderzeichen wie Leerzeichen und Anführungszeichen enthalten).

  • Weniger häufig sind Glob-Qualifikationsmerkmale wie in foo*(*)(wie foo*, behalten aber nur ausführbare Dateien), foo(.)(nur reguläre Dateien, keine Verzeichnisse), foo(-@) (nur baumelnde Symlinks), foo*(m-5)(nur Dateien, die in den letzten 5 Minuten geändert wurden), foo*(om[1])(die zuletzt geänderte Datei), usw.

  • autocd: Wenn Sie einen Verzeichnisnamen als Befehl eingeben, ändert sich der Name ( cdoder pushdabhängig von der Konfiguration). Der cdBefehl ist drei Zeichen zu lang! Ich kann bash nicht länger als dreißig Sekunden verwenden, ohne den Schmerz zu spüren. Ich habe auch ein paar Single-Character-Funktionen, wie z

Funktion - { if [[$ # -eq 0]]; dann CD "$ OLDPWD" sonst Builtin - "$ @" fi } 
  • Das zmveingebaute und
Alias ​​zcp = 'noglob zmv -C' Alias ​​zln = 'noglob zmv -L' Alias ​​zmv = 'noglob zmv' 
  • Ich bin dabei, der noglobeingebaute.

  • Die precmdund preexecHook - Funktionen: Ich benutze preexecmeinen Terminal Titel, um den laufenden Befehl schließen und precmdden Befehl mit seinem Exit - Code zu ersetzen. So etwas wie

term_title_base = '@% l:% 1 ~' preexec () { print -nr $ '\ e] 2;' "$ {(%) term_title_base} $ *" '$ \ a' } precmd () { print -nr $ '\ e] 2;' "$ {(%) term_title_base} ($?)" '$ \ a'  } 
  • Strg + Z:
    • Auf einer leeren Kommandozeile läuft bg(so dass Strg + Z Strg + Z ein Programm anhält und sofort im Hintergrund fortsetzt).
    • Unterbrechen Sie in einer nicht leeren Befehlszeile die aktuelle Befehlsausgabe: Lassen Sie mich einen anderen Befehl eingeben, und wenn diese zweite Befehlszeile beendet ist, bekomme ich den ersten zu bearbeitenden Befehl zurück.
    • Dies verwendet die folgende Funktion:
fancy-ctrl-z () { if [[$ # BUFFER -eq 0]]; dann bg Wiederholen sonst zle Push-Input fi } zle -N Phantasie-Strg-z bindkey '^ Z' fancy-ctrl-z 
  • Die wichtigsten Optionen, die sich nicht auf die Fertigstellung beziehen: setopt append_history autocd extended_glob no_match
Ich liebe den ^ Z ^ Z-Trick, danke! Ursprünglich suchte http://superuser.com/questions/378018/ nach einer Lösung, um es an einen einzelnen Schlüssel zu binden, aber ^ Z ^ Z macht so viel mehr Sinn Evgeniy Dolzhenko vor 12 Jahren 3
13
Mark Thalman

Die Fähigkeit von zsh, neben Dateien und Verzeichnissen auch Dinge automatisch zu vervollständigen.

Wenn beispielsweise das git-Paket installiert ist, zeigt git-sh Folgendes an:

- git Befehl - shortlog - fasst die git-Protokollausgabe zusammen Show-Branch - Zeigt die Filialen und ihre Commits show-index - Zeigt den Inhalt einer Pack-IDx-Datei an
Ja das ist ausgezeichnet! Ich verwende das auch, wenn ich nicht ganz sicher bin, was ein Befehlszeilenschalter ist, aber ich muss mich nicht in die Man-Datei einarbeiten. Frew Schmidt vor 14 Jahren 1
Ich glaube, dass Bash auch diese Fähigkeit hat. Keith Thompson vor 10 Jahren 0
10
hometoast

Ich mag die globalen Aliase wirklich sehr

alias -g L='|less alias -g DN='>/dev/null' 

lass mich solche Sachen machen

somecommand file arg L 

und rufen Sie auf.

Ich mag auch G für Grep. Frew Schmidt vor 14 Jahren 0
7
theotherreceive

Wie von anderen erwähnt, ist die Autovervollständigung von zsh hervorragend.

Sie können Ihre eigene Autovervollständigung für benutzerdefinierte Befehle ohne großen Aufwand einrichten. Um vollständige Benutzernamen als Argumente in den Finger zu geben:

# ~/.zshrc function userlist { reply=(`users | tr ' ' '\n' |sort -u `);} compctl -K userlist finger set COMPLETE_ALIASES 

Andere Optionen, die ich gerne eingestellt habe:

# turn on spelling correction setopt correct # don't save duplicates in command history setopt histignoredups # don't allow accidental file over-writes setopt noclobber 

Pushd und Popd sind auch sehr praktisch.

# Always pushd when changing directory setopt auto_pushd # Have pushd with no arguments act like `pushd $HOME'. setopt PUSHD_TO_HOME 

Die Home- und End-Tasten funktionieren bei zsh standardmäßig nicht wie bei anderen Shells, aber Sie können dies beheben.

# Make home and end keys work. [[ -z "$terminfo[khome]" ]] || bindkey -M emacs "$terminfo[khome]" beginning-of-line [[ -z "$terminfo[kend]" ]] || bindkey -M emacs "$terminfo[kend]" end-of-line 
Ich finde die Rechtschreibkorrektur eher ärgerlich als hilfreich. Frew Schmidt vor 14 Jahren 2
@Frew heh, du bist nicht der erste, der mir das sagt. Eine der schöneren Funktionen der Korrektur ist, dass die korrigierte Version in die Historie eingefügt wird, sodass Sie nicht mehr dasselbe aus Versehen ausführen. theotherreceive vor 14 Jahren 0
5
Rob Wells

Aktivieren Sie die automatische Vervollständigung bei Verwendung scpauf einem Remote-Server.

Die richtige Aufforderung zur Anzeige zusätzlicher Informationen.

Tatsächlich! Ich habe eine sehr komplexe, aber kurze Ansage. Hostname [aktuelle Zeile] % Frew Schmidt vor 14 Jahren 0