The Z-Shell (ZSH) Lovers' Page (original) (raw)
Latest change: Sat Nov 22 21:44:36 CET 2003
An abstract description of the ZSHELL's features.
The ZSH is a great shell (aka "command line interpreter") which can make it a lot easier for beginners. However, even the Linux community has not really discovered it yet even though it has considerable advantages over bash and tcsh and a lot in common with sh and ksh.
This page lists describes some of ZSH's features to give you an idea of what is possible. Hopefully this is an alternative to your reading the fine manual - which, by the way, has almost 19,00 lines on an 80 column terminal for zsh 4.1.1.
have a lot of fun!
Sven Guckes webpage-zsh-lover(at)guckes.net Matthias Kopfermann matthi(at)infodrom.north.de
Notation
The string [zsh] is presented at the start of line to indicate that the following command is entered with a ZSH. It's just a precaution in case other examples are presented with eg the bash or the ksh.
"EOL" stands for "end-of-line".
Shell Name Abbreviations:
- sh - Bourne Shell
- csh - C-Shell
- ksh - Korn Shell
- tcsh - see "THE T IN TCSH" in the manual. Special Characters
- "ESC" stands for the "escape" key
- "C-A" and "^A" stand for "Control-A"
ZSH Features
**Compatibility.**The ZSH is based on ksh and also includes some features of bash and tcsh. There are many books on shells and shell scripting so there is lots of information about how this kind of program works and can be handled.
Emulation Modes. For those who already know the basic shells (sh, csh, ksh) there are emulation modes which tune the zsh such that it behaves just like one of them, eg with emulate sh
. (see the zshbuiltins manual, section "emulate" ). [link!] Mind you, the emulation is not perfect. But it certainly eases its use if you have used other shells before.
**Configurability!**The ZSH has over 130 options which allows adaption to the user's preferences and a lot of flexibility.
**Modularity.**The ZSH is modular. You can leave out all the modules and thus get a shell with a lot less memory than eg bash.
Expandability. There are a lot of expansion commands. This allows to expand command prefixes *and* parameter prefixes, prefixes of files and directory name, as well as expansion on environment variables,
man zshcompsys
-->
[Programmable expansion have been available since bash 2.04 since April 2000. However, the ksh does not have that feature at all.]
Command Completion
Instead of using a lot of extra options you can now adjust the shell's expansions with the use of functions. This also means that you can quickly generate more completions by simply editing existing ones. And ZSH already ships with quite a few completions, eg try xterm -fn <TAB>
.
More examples for completions [using the old scheme up to 3.1.5]:compctl -g '*(/)' cd
- this makes "cd" complete on subdirs only.compctl -k '(`command`)'
- this allows to complete on all sorts of useful things, eg complete on email addresses for the mailer or on ftp addresses for the ftp client.compctl -g '*.class(:r)' java
- this will chop off the file extension on completion which is useful eg with the java compiler. (who would otherwise try to open "foo.class.class").
Global Aliases
An alias name will only be expanded when it is the first word within the command. However, a global alias will also be expanded when it occurs elsewhere. Example: alias -g L=' |less'
this allows to enter 'L' at the end of a command chain to get the output piped to the "less" pager:
[zsh] cut -d: -f 5 /etc/passwd | sed 's/ .*//' | sort | uniq -c | sort -n L
Filename Exclusions. The filename patterns are good for finding complicated matches, however, there is usually no way to *exclude* some matches. ZSH however allows the '^' to be used as a NOT operator, meaning "match all dirs/files *not* matching the following pattern". For example, ^(bar|foo)
would leave out "bar" and "foo" from the list of all dirs+files in the current directory. More specifically, ls ^(*.bz2|*.gz)
would list all dirs+files not ending in either ".bz2" or ".gz". ZSH allows to take away matches with the '~' character. This requires setopt extended_glob
to be set.
Furthermore,grep foo bar*~(*.gz|*.bz|*.bz2|*.zip|*.Z)
searches for "foo" in all files starting with "bar"except those with an extension which indicates that the data has been compressed.
As this list of extensions is already quote long for typing you might want to abbreviate it with a global alias. Make sure that the global aliases have a unique name; It's probably best to use an unusual character as their initial, eg the '�'.
alias -g �k="*~(*.bz2|*.gz|*.tgz|*.zip|*.z)"
Then ls -d �nk
will list all compressed files.
Use unalias '�k'
to get rid of the alias. Mind the ticks around the alias name - because if they were missing then the ZSH would expand them.
There is an alternative to stuffing all functions into one huge setup file: You can put each function into its own file, put them into some directories, point at these with $FPATH, and select their loading by means of autoload function .
TITLE
man zshmisc /**AUTO**LOADING FUNCTIONS
For each variable written in capital letters, eg PATH, there exists a variable by the same name in lowercase letters. If the upperase name is a list of items then the lowercase one contains these items separated by spaces.
Example:
[zsh] echo $PATH /home/guckes/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
[zsh] echo $path /home/guckes/bin /usr/local/bin /usr/bin /bin /usr/bin/X11 /usr/games
This makes it a lot easier when dealing with such lists:
`for dir in $path; do for> echo $dir for> done /home/guckes/bin /usr/local/bin /usr/bin /bin /usr/bin/X11 /usr/games
`
Note: When you are inside a "for" loop then the ZSH indicates this by indenting the input line with "for>".
And this makes assigning a value to a variable easier, too:
[zsh] path=( /home/guckes/bin /usr/local/bin /usr/bin /bin /usr/bin/X11 /usr/games ) [zsh] echo $PATH /home/guckes/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
[zsh] path=( array> /home/guckes/bin array> /usr/local/bin array> /usr/bin array> /bin array> /usr/bin/X11 array> /usr/games array> )
Again, ZSH helps to see the current context with showing a special input prompt, "array>".
You can now easily modify this input by going back to the command and move the cursor into the input, line by line, editing them, or even delete some:
path=( /home/guckes/bin /usr/local/bin /usr/bin /bin )
ZLE - the ZSH Line Editor
The input line of shells can be long, and even be *very* long. But these are displayed as *one* long line which gets broken across several lines on screen. A long line simply gets unreadble, very much like program code which is presented in one long line.
The ZSH has a builtin line editor which allows editing across several lines on screen - but *with* EOLs, so it allows to split up the input line into several lines making editing and reading a lot easier for the user. You can move the cursor between the parts of the input line up and down.
See also: man zshzle
Editing Commands
The command insert-last-word
inserts the last word from the previous command line. This easily reuses the word without having to type it in again yourself. Simply type 'ESC' followed by '_' (underscore)
[zsh] ls -l .newsrc.news-cis-dfn-de [zsh] ln -s ESC_ .newsrc [zsh] ln -s .newsrc.news-cis-dfn-de .newsrc
[zsh] bindkey | grep insert-last-word "^[." insert-last-word "^[_" insert-last-word
See also: man zshzle
print [TODO]
The print command is similar to "echo" - but allows to sort the input and set the output in columns.
Example: Print the list of letters on the keyboard in columns after they are sorted (option "-o").
[zsh] print -o -C 4 q w e r t y u i o p
a s d f g h j k l z x c v b n m
a h o v
b i p w
c j q x
d k r y
e l s z
f m t
g n u
Note that the last row spells "gnu"! :-)
And if you'd liked to check up on the expandos for the prompt then you can use option "-P" for this without the need to change PS1 at all:
Co-Processes [TODO]
The ZSH supports co-processes (just like the ksh). This allows to
Die Zsh unterst�tzt wie ihr Vorbild -die Ksh- Koprozesse. Koprozesse sind eine M�glichkeit, an Parallelprozesse Daten zu �bergeben und Daten zu empfangen. Diese Koprozesse werden allerdings mitcoproc
eingeleitet und nicht wie bei der Ksh mit |&
.
Mit print -p
und mit >&p
als Umlenkung kann ich Daten an den Proze� senden und mit read -p
und <&p
als Umlenkung Daten von diesem Proze� auslesen. Beispiel: coproc ed notizen
und dann irgendwannls -l >&p
und nach einer Weile vielleichtecho ".\nw " >&p
schreibt in einen parallel laufenden Koprozess, den altehrw�rdigen Ed, Daten.
RPROMPT
typeset [TODO]
The typeset command is like "echo" - but a lot more powerful. It can align text, uppercase/lowercase it,
typeset -L2 name=werteintrag ;print "[$name]"
gibt linksformatiert "[we]" aus, die ersten 2 Buchstaben, umrahmt von [].typeset -lL20 name=WERTEINTRAG;print "[$name]"
gibt in Kleinbuchstaben (-l f�r lower) "[werteintrag ]" aus, wobei 20 - 11 Leerzeichen eingef�gt werden. typeset -r RPROMPT=%n
sch�tzt den Rechtsprompt vor einem versehentlichen �berschreiben. Die Variable ist jetzt read-only und zsh warnt einen mit "zsh: read-only variable: RPROMPT ". Alle typeset-Befehle k�nnen mit einem -
statt dem +
aufgehoben werden.
See also: man zshbuiltins
, section "typeset"
Filename Expansion with Qualifiers
man zshexpn **/Glob** Qualifier
Die Ausgabe von Dateinamen kann mittels sogenannter Qualifier spezifiziert werden:
z.B findet print -l *(m-1)
nur Dateien, die vor bis zu einem Tag modifiziert wurden.print -l *(a1)
findet Dateien, auf die vor einem Tag zugegriffen wurde.print -l *(@)
findet nur die Links.ls -doF *(/)
findet nur die Verzeichnisse.chmod 640 *(W)
ver�ndert die Rechte aller Dateien, in die jeder schreiben darf. Das ist ja besonders riskant! grep name *(.)
findet nur noch reine Dateien. Damit ist die unsinnige Meldung "grep: bla: Is a directory" f�r alle Zeiten vermeidbar.
Um mal wieder an alte Zeiten erinnert zu werden, k�nnte man auchgrep name *(^.@) eingeben
.Hiermit werden alle Dateien aufgelistet, mit denen grep nichts anfangen kann, denn ^ ist das Nicht-Zeichen :).gg() { grep -wE "$1" *(.) | less -r }
k�nnte eine kleine Zsh-Funktion sein, um gezielt nach einem Wort und unter Zuhilfenahme von regul�ren Ausdr�cken zu suchen. Ich pers�nlich benutze allerdings lieber perl f�r solche Dinge und habe daf�r mg
entdeckt.
Qualifier "lowercase"
for i in [A-Z][A-Z]*(.); do mv <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span></span></span></span>{i:l} ;done
ist ein sehr schneller Befehl, um Dos-Dateien zu Dateien mit kleinen Buchstaben zu machen. Der Qualifier :l (f�r lowercase) leistet hier ganze Arbeit.print -l *(Lk+50)
gibt Dateien aus, die �ber 50 Kilobytes gro� sind.
=() (NAME?)
Ich kann unter der Zsh komprimierte Email-Pakete lesen, ohne mich um das Entpacken k�mmern zu m�ssen. Das geht z.B. so:mutt -f =(zcat mailfold*.gz)
In den =()
steht die Aktion, die mit einer Datei gemacht wird, es wird dabei eine tempor�re Datei erzeugt und mit ihr z.B. mutt -f aufgerufen. Ein anderes Beispiel:
mutt -f =(cat mail1 mail2 mail3 mail4)
ruft mutt mit einer tempor�ren Datei, die diese 4 Mailordner enth�lt, auf.
(mutt ist ein sehr sch�nes Mail-Programm, das ich empfehlen kann. Mit mutt -f liest mutt nicht aus /var/spool/mail, sondern die Email-Datei, hier mailfolder.gz)
Ein anderes Beispiel:lynxbzgrep() { lynx -force_html -dump =(bzip2 -cd <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo stretchy="false">)</mo><mi mathvariant="normal">∣</mi><mi>g</mi><mi>r</mi><mi>e</mi><mi>p</mi></mrow><annotation encoding="application/x-tex">1) | grep </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mord">∣</span><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="mord mathnormal">re</span><span class="mord mathnormal">p</span></span></span></span>2) }
erm�glicht es, mit lynxbz bzip2-gepackte HTML-Seiten nach einem Begriff zu untersuchen.
Noch viel besser: Statt einer tempor�ren Datei kann man sogar einen Koprozess bequem aufrufen, indem man <()
lynx -force_html <( gzip -cd komprimiert.html.gz ) ist kein Problem . Hier wird lynx, was keine komprimierten Dateien lesen kann, mit dem Output von gzip -cd komprimiert.html.gz
, besser einer named pipe gespei�t, sehr cool!
Durch intelligente Kommunikation verschiedener Proze�e wird es m�glich, da� man zwei Pseudodateien erzeugen und miteinander vergleichen kann: In Shellkreisen wird dies als "named pipe" bezeichnet, die die Zsh indirekt erzeugt.
diff <(zcat erste_datei.gz) <(zcat zweite_datei.gz)
vergleicht den Inhalt zweiter komprimierter Dateien miteinander.
NULLCMD
Nach Setzung von READNULLCMD=less l��t sich eine Datei mit< datei
unter less angucken. Einfach ein <
vor die Datei setzen.
Redirection of output to multiple files
Es ist ohne Probleme m�glich, an mehrere Dateien die Standardausggabe umzulenken:ls >datei1 >datei2 >datei3
oderls >> datei1 >> datei2
Redirection of input from multiple files
Man kann auch die Standardeingabe von mehreren Dateien empfangen:less < datei1 < datei2
Redirection to file as well as send on to pipe
Es ist m�glich, eine Umlenkung in eine Datei und gleichzeitig an eine Pipe zu bewerkstelligen: make >logfile | grep Error
(lookup in $PATH) Mit ls -l =emacs
kann ich beispielsweise in jedem Verzeichnis gucken, wie gro� emacs genau ist. Ich mu� nicht mehr den Pfad angeben. Die Zsh guckt f�r mich im Pfad nach, wenn ich emacs im Pfad habe. Ich kann auch beq�m Dateien, die im Pfad stehen, auf diese Art editieren.jed =genial.c
editiert eine C-Funktion, wenn sie im Pfad gefunden werden kann.
Globbing with Recursion
Statt eines sehr expliziten aber umst�ndlich zu tippenden find-Befehls kann under der ZSH ** als rekursives K�rzel verwendet werden. Mit print -l **/*.html
finde ich alle Html-Seiten, die in allen Verzeichnissen unterhalb des jetzigen Verzeichnisses vorhanden sind und gebe sie auf je einer Zeile (-l) aus.(**=Rekursion)print -l **/datei.html
sucht die bestimmte Datei in allen vom aktuellen Verzeichnis abgehenden Verzeichnissen und gibt genau sie aus.print -l **/*.html~datei.html
gibt alle Html-Seiten mit Ausnahme von datei.html zeilenweise aus.grep name **/*.txt
sucht in allen Texten unterhalb des gegenw�rtigen Verzeichnisses nach Dateien mit Endung .txt.
Builtin Command "vared"
Mitvared Variable
kann ich alle Umgebungsvariablen editieren. Das finde ich praktisch, weil ich sofort die Variable erreiche und nicht erst in einer Datei wie .zshrc nach ihr suchen mu�. Au�erdem wirkt nat�rlich das Editieren der Variablen sofort.
Builtin Command "dirs"
Der Befehldirs -v
zeigt mir alle Verzeichnisse, in denen ich in einer Sitzung gewesen bin zeilenweise an, wenn ich w�hle:setopt autopushd
Ich kann nun mit cd +2 das vorletzte Verzeichnis erreichen.
TITLE
Mit der Zsh kann ich sehr lange Unterverzeichnisse im Prompt mit einem kurzem oder signifikanteren Namen (named directory) versehen und dann mit ~name aufrufen. Das ist insbesondere dann sehr praktisch, wenn ich in einem sehr entfernten Ordner von / ausgesehen agiere.
Ich habe mir eine kleine Zsh-funktion geschrieben, die mir aus einem langem Verzeichnisnamen einen kurzen erzeugt:
`
zzz () {
NAMED_DIRECTORY=$PWD:t; # der Name des jetzigen Verzeichnisses wird
# an NAMED_DIRECTORY ohne die Hierarchie �bergeben.
# :t steht f�r tail.
eval <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi><mi>A</mi><mi>M</mi><mi>E</mi><msub><mi>D</mi><mi>D</mi></msub><mi>I</mi><mi>R</mi><mi>E</mi><mi>C</mi><mi>T</mi><mi>O</mi><mi>R</mi><mi>Y</mi><mo>=</mo></mrow><annotation encoding="application/x-tex">NAMED_DIRECTORY=</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord mathnormal" style="margin-right:0.10903em;">N</span><span class="mord mathnormal">A</span><span class="mord mathnormal" style="margin-right:0.05764em;">ME</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em;">D</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.02778em;">D</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mord mathnormal" style="margin-right:0.00773em;">RECTOR</span><span class="mord mathnormal" style="margin-right:0.22222em;">Y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span></span></span></span>PWD; # es findet die Setzung eines named directory statt.
cd ~$NAMED_DIRECTORY; # es wird in das named directory gesprungen.
# ist mit dem bestehenden Verzeichnis identisch
# aber der Name ist k�rzer im Prompt.
}
Eine au�erdem sehr praktische M�glichkeit besteht darin, da� ich jetzt nicht mehr den ganzen Pfadnamen angeben mu�, wenn ich eine Datei verschiebe. z.B.
mv datei.1 ~lm1k�nnte meine Datei bequem nach /usr/local/man/man1/ verschieben, wenn ich
lm1=/usr/local/man/man1gesetzt haben sollte. Bei der Prompt-Darstellung gibt es zwei M�lichkeiten: Entweder wei�t man am Ende auch noch den letzten Slash zu:
info=/usr/local/info/Hier wird im Prompt der ganze Name dargestellt.
cd ~info springt zwar nach /usr/local/info, aber im Prompt steht:
/usr/local/info%. M�chte man aber den kurzen Prompt haben, dann mu� man so zuweisen:
info=/usr/local/info`, also ohne Slash am Ende.
TITLE
Die Option autocd
erlaubt es, nur den Namen eines Ordners anzugeben. Bei Eindeutigkeit wird dann sofort in diesen Ordner gesprungen. z.B. springt bin
dann sofort in mein bin-Verzeichnis.
TITLE
Es gibt keinen Fehler bei Farbprompts wie unter der Bash1-Shell. Da ich selber eine Gliederung meiner Promptinformationen durch Escape-Farbbefehle liebe, ist mir das wichtig.
Bei der Zsh m�ssen hierzu allerdings die Escape-Befehle von %{ %}
eingerahmt werden. Also zum Beispiel:%{^[[31m%}%~ %{[0m%}
.
Ich habe mir, um die �bersicht nicht zu verlieren, Variablen definiert, die die Farben f�r den Prompt enthalten.RED_PROMPT='%{^[[31m%}' OFF_PROMPT='%{[0m%}'
Jetzt kann ich auf diese Variablen mit $ zugreifen.
TITLE
Mit RPROMPT l��t sich ein PROMPT auf der rechten Seite definieren:RPROMPT=%l
zeigt mir beispielsweise an, auf welchem Rechner ich mich befinde.RPROMPT=%n
zeigt den Benutzer an.RPROMPT=%T
zeigt die Zeit an.RPROMPT=%D{%d.%m.%y}
zeigt das Datum nach deutscher Dartstellung an.
TITLE
Selbstverst�ndlich kennt die Zsh auch eine Korrekturm�glichkeit bei falscher Eingabe, die aber nur dann wirksam wird, wenn man das wirklich eingestellt hat. Man setzt in einen solchem Fall einfach:setopt autocorrect
.
Die Korrektur kann durch Setzung einesalias <befehl>=nocorrect <befehl>
verhindert werden.
TITLE
Um dar�ber informatiert zu werden, wer alles au�er mir sich eingeloggt hat gibt es das Kommando watch
wie unter der Tcsh.watch=(notme)
listet z.B alle Benutzer auf, die nicht ich sind :)
Hierbei kann das Format der Ausgabe ge�ndert werde:WATCHFMT='%n eingeloggt auf Terminal %l von %M seit %T '
W�hlt man watch=(@vorsicht_ist_angesagt)
, so werden alle Benutzer aufgef�hrt, die von dem Server vorsicht_ist_angesagt eingeloggt sind.
Positiv herum kann man so nat�rlich auch alle Freunde erkennen lassen:watch=( < ~/.freunde root)
liest alle Freunde aus der Datei.friends
in das Feld watch zus�tzlich zu root ein. So kann man schnell erkennen, wenn sich Freunde einloggen.
TITLE
Es gibt in der Zsh einen sehr bequemen Wiederholungsbefehl, der von der tcsh abgeschaut ist:repeat
. M�chte ich z.B. einen Werbemailer b�swillig strafen, dann k�nnte ich das so machen:repeat 100 mail -s "spams suck" badcompany@devilsheart.com < flame
Dabei sollte allerdings bedacht werden, da� man damit meist harmlose Benutzer trifft, die schlechte Passworte haben und deshalb R�ubern auf den Leim gegangen sind.
TITLE
Rufe ich ein altes Kommando mit !?kommando
auf, habe ich die M�glichkeit, vor der erneuten Ausf�hrung zu gucken, ob es sich hierbei auch um das gew�nschte Kommando handelt. Ich dr�cke einfach TAB. Ebenso kann man sich auch die genau betroffenen Dateien eines global wirkenden Befehles (z.B. ls *.html) mit TAB ansehen.
TITLE
Gerade eben getippte Worte auf der Kommandozeile k�nnen mit !# genauer wiedergegeben werden als bei Bash/Tcsh/Ksh. Man gibt einfach an, wo wiederholt werden soll: z.B.echo ein_langes_wort zweites_langes_wort drei !#1-2
schreibt auf den Bildschirm: ein_langes_wort zweites_langes_wort drei ein_langes_wort zweites_langes_wort.
TITLE
PERIOD=300; periodic funct() fortune -s f�hrt alle 300 Sekunden die Funktion funct aus und gibt eine Zeile vor dem Prompt eine kurze Weisheit weiter. Allerdings mu� dazu auch am Prompt ein Befehl eingegeben werden, sonst kann man nat�rlich nichts auf dem Bildschirm sehen.
TITLE
Die Zsh kennt den .. Operator von Pascal (und Perl):echo {1..7}"\n Wo ist Microsoft geblieben?"
ergibt: 1 2 3 4 5 6 7 Wo ist Microsoft geblieben?
TITLE
Wie die Bash kann die Zsh auch durch eckige Klammern Ganzzahlen berechnen:echo "17*35" = $[17*35]
TITLE
Die Zsh hat in ihrer sehr m�chtigen HISTORY CONTROL ein run-help Kommando, mit dem zu einem Buffer gezielt Informationen abgerufen werden k�nnen. Voreingestellt ist hier der Aufruf der Manpage zu dem Kommando. Ver�ndern k�nnte man diesen Aufruf, indem man einfach aus alias run-help=man alias run-help=info
macht.
TITLE
Sogenannte User-Widgets erlauben das Einbinden eigener Funktionen an Tastaturbefehle z.B. f�r folgende Funktion:`
wohin () { dirs -v print -n "Wohin? " read WOHIN cd +${WOHIN:=0} }
kann mit
bindkey w wohin auf
Control-Ww gelegt werden. Dazu mu� vorher
zle -N wohin deklariert worden sein, dieses User-Widget wirkt beim n�chsten Aufruf der Shell.
man_zshall() man zshall und nachfolgendes Deklarieren von
zle -N man_zshall kann durch Definition von
bindkey man_zshall nun immer bei
^Z ` ausgef�hrt werden.
TITLE
sched
ist ein interner Befehl zum automatischen zeitgebundenen Abarbeiten von Kommandos �hnlich wie bei at. Dabei werden die Kommandos aber nicht ausgef�hrt und dann als email zugeschickt, sondern gelangen erst einmal in den Puffer und werden beim n�chsten Kommando erst auf dem Bildschirm ausgegeben.sched +0:10 sysvbanner "Du mu�t jetzt los"
f�hrt in 10 Minuten in Gro�schrift auf dem Bildschirm eine Warnung zum gehen aus, wenn dann das n�chste Kommando eingegen wird, sonst erst beim Kommando, wenn das auch Stunden sp�ter sein sollte.
History
The name ZSH derives from Zhong Shao, teaching assistant at Princeton university (now [2004] at Yale).Paul Falstad thought that his login name, "zsh", was a good name for a shell.
Paul released zsh 1.0 to alt.sources on December 16th 1990.
Credits
Matthias Kopfermann - matthi(at)infodrom.north.de http://www.infodrom.north.de/\~matthi/
Matthias is the author of the original version of this text. He started writing it on 1997-10-17 - in German, title "die ZSH Liebhaber Seite". [and his last edit of that page apparently was on 2000-10-06.] "I first learned about the ZSH when I read the Linux Gazette. A user presented a very simple solution using the ZSH about the topic 'renaming von uppercase letters of DOS files to Linux'. And on a page which covered the differences of shells I learne that the author said that the ZSH can probably do more than the author knows about himself. This made me curious."
Sven Guckes - www.guckes.net
Sven translated this page on 2003-11-09 and 2003-11-22 (gray November days) into English.
Sven Wischnowsky - www.w9y.de
Author of the completion code (compctl and compsys) - and then some. "Mann, muss ich mal Zeit gehabt haben ;-)" (man -
Zhong Shao
Sven Guckes webpage-zsh-lover@guckes.net http://www.guckes.net/zsh/lover.html