Tip #8: Einfache Suche in der History mit den Pfeiltasten
Jörg wartete gestern bei unserem Stammtisch mit einem netten Schnipsel auf:
autoload -U history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey “\e[A” history-beginning-search-backward-end
bindkey “\e[B” history-beginning-search-forward-end
Dieser Fünfzeiler sorgt dafür, dass man mit den Pfeil-Hoch- und -Runter-Tasten die History durchsuchen kann. Beispiel:
$ ls $ less abc $ vim xyz $ ssh example.org $ man zsh $ less foo
Dies sei ein Ausschnitt der History. Nun gibt man l und Pfeil nach oben ein. Beim ersten Druck erscheint less foo, beim zweiten less abc und beim dritten ls. Die Eingabe von le und der Pfeiltaste würde hier nur die less-Befehle erscheinen lassen.
Ich finde das recht nützlich und habe das gleich mit in meine .zshrc aufgenommen.
Hitparade der Shellkommandos
ak und Tim machen es vor und ich muss es natürlich nachmachen.
Meine Top10 der meistgenutzten Shellkommandos:
jens@qbiathome:~/ > fc -ln 1|awk ‘{print $1}’ |sort|uniq -c | sort -rn |head -n 10
597 ls
454 rm
440 svn
279 ll
277 screen
274 ssh
242 gpg
224 man
206 slrn
195 less
Ich habe oben das Builtin fc der zsh genutzt. Man kann da auch, wie in die obigen Postings history oder gleich $HISTFILE nutzen.
Tip #7: Tastenbelegung wie beim Emacs nutzen
Heute gibt es mal wieder einen zsh-Tip und vielleicht schaffe ich es zukünftig etwas mehr davon zu schreiben.
Wenn ich mich mit neuen zsh-Nutzern unterhalte, höre ich oft von dem Problem, dass die Strg+A-Taste nur ein ^A einfügt. Ebenso passiert das mit Strg+E und anderen Tasten. Im Endeffekt heißt das, dass der Nutzer bisher das Emacs-Tastenschema genutzt hat und dies nun in der zsh auch wieder tun will. Falls aber nichts genaues eingestellt ist, liest die zsh die Umgebungsvariable EDITOR aus und stellt das Schema entsprechend dem dort gesetzten Standardeditor (oftmals vim) ein. Um das zu ändern kann man am Prompt bindkey -e emacs eingeben oder aber man trägt diese Zeile direkt in die .zshrc ein. Die Einstellung set -o emacs bewirkt das Gleiche.
zsh-Tips von strcat
Christian Schneider hat heute begonnen, eine Reihe von Tips zur zsh zu schreiben:
Tip #6: Substitution von Verzeichnissen
Auf der Mailingliste der zsh-Nutzer lief mir heute ein netter Tip über den Weg:
Stelle dir vor, du befindest dich im Verzeichnis /var/www/user123/statistik/log/heute und willst nach /var/www/user134/statistik/log/heute wechseln, d.h. einfach in dasselbe Verzeichnis eines andren Nutzers. In der zsh geht das ganz einfach:
cd 123 134
Siehe da, du stehst im richtigen Verzeichnis.
Log vom zsh-Workshop
Wer ein wenig zsh lernen wollte, konnte vor kurzem ins IRC kommen. Dort gab es einen Workshop zur zsh. Wie auch Mika habe ich das nicht geschafft, mit hin zu kommen. Zum Glück gibt es ein IRC-Log vom Workshop (auch lokal) zum Nachlesen. Bei Gelegenheit werde ich mir das zu Gemüte führen und vielleicht den einen oder anderen nützlichen Tip draus basteln.
Tip #5: run-help
Zufälligerweise stiess ich gerade auf ein nettes Feature, welches mir bis dato unbekannt war: run-help.
In der Standardkonfiguration ist run-help einfach ein Alias auf man und macht nichts anderes als die Manpage des Arguments aufzurufen. Doch man kann das schnell ein wenig intelligenter machen:
unalias run-help
autoload run-help
Der alleinige Aufruf von run-help bringt nun:
kubijens@ppc210:~/ > run-help
Here is a list of topics for which special help is available:
alias compvalues getln rehash unlimit
autoload continue getopts return unset
[...]
Wenn ihr das mit einem Argument aufruft, navigiert euch run-help an die jeweilige Stelle der zsh-Manpage. Das Kommando hat sich bei mir schnell als äußerst nützlich herausgestellt.
Tip #4: Globbing
Die zsh bringt einen äusserst mächtigen Mechanismus zum sog. Globbing, d.h. zur Ermittlung von Dateinamen, mit. Wie das funktioniert, will ich nun an einigen Beispielen demonstrieren:
Du hast in einem Projekt folgende Dateien angelegt:
kubijens@ppc210:~/TeXing/ > ls
file10.tex file13.tex file3.tex file6.tex file9.tex
file11.tex file1.tex file4.tex file7.tex Makefile
file12.tex file2.tex file5.tex file8.tex master.tex
Um vom Globbing der zsh zu profitieren, solltest du dies zuerst einschalten. Gib dazu die Zeile setopt extendedglob entweder direkt in die .zshrc oder in die Kommandozeile ein. Nun steht dir das erweiterte Globbing voll zur Verfügung.
Stell dir vor, du hast die obigen LaTeX-Dateien kompiliert. Dadurch sind dann eine Menge an .aux-, .log und .dvi-Dateien entstanden. Wenn du jetzt wissen willst, was außer den eigentichen LaTeX-Dateien denn sonst da ist, hilft das “^”. Dies neigert das ihm folgende Muster:
kubijens@ppc210:~/TeXing/ > ls ^*.tex
file10.aux file12.aux file1.aux file3.aux file5.aux file7.aux file9.aux
file10.dvi file12.dvi file1.dvi file3.dvi file5.dvi file7.dvi file9.dvi
file10.log file12.log file1.log file3.log file5.log file7.log file9.log
file11.aux file13.aux file2.aux file4.aux file6.aux file8.aux Makefile
file11.dvi file13.dvi file2.dvi file4.dvi file6.dvi file8.dvi
file11.log file13.log file2.log file4.log file6.log file8.log
kubijens@ppc210:~/TeXing/ > ls ^*.*
Makefile
Eventuell kann es auch interessant sein, bestimmte Bereiche anzuzeigen:
kubijens@ppc210:~/TeXing/ > ls file<1-7>.tex
file1.tex file2.tex file3.tex file4.tex file5.tex file6.tex file7.tex
kubijens@ppc210:~/TeXing/ > ls file<7->.tex
file10.tex file11.tex file12.tex file13.tex file7.tex file8.tex file9.tex
Richtig interessant wird es dann mit “**/”. Dieser veranlasst eine rekursive Suche. Dazu habe ich in der obigen Struktur drei Verzeichnisse mit jeweils weiteren Dateien angelegt:
kubijens@ppc210:~/TeXing/ > ls **/
HTML/:
file10.html file13.html file3.html file6.html file9.html
file11.html file1.html file4.html file7.html file.html
file12.html file2.html file5.html file8.html
PDF/:
file10.pdf file12.pdf file1.pdf file3.pdf file5.pdf file7.pdf file9.pdf
file11.pdf file13.pdf file2.pdf file4.pdf file6.pdf file8.pdf file.pdf
PS/:
file10.ps file12.ps file1.ps file3.ps file5.ps file7.ps file9.ps
file11.ps file13.ps file2.ps file4.ps file6.ps file8.ps file.ps
kubijens@ppc210:~/TeXing/ > ls **/file1*.*
file10.aux file11.tex file13.log HTML/file11.html PDF/file13.pdf
file10.dvi file12.aux file13.tex HTML/file12.html PDF/file1.pdf
file10.log file12.dvi file1.aux HTML/file13.html PS/file10.ps
file10.tex file12.log file1.dvi HTML/file1.html PS/file11.ps
file11.aux file12.tex file1.log PDF/file10.pdf PS/file12.ps
file11.dvi file13.aux file1.tex PDF/file11.pdf PS/file13.ps
file11.log file13.dvi HTML/file10.html PDF/file12.pdf PS/file1.ps
Ich denke, dass System ist einfach zu verstehen. Hinter dem Suchmuster kann man nun noch eine Art Vermerk machen und so die Treffer etwas einschränken. Ein Beispiel wäre, sich nur die Verzeichnisse anzeigen zu lassen. Hierzu musst du ls auch die Option -d mitgeben (-F für das Anhängen einen “/” an den Verzeichnisnamen kann u.U. auch sinnvoll sein):
kubijens@ppc210:~/TeXing/ > ls -d *(/)
HTML PDF PS Leer
kubijens@ppc210:~/TeXing/ > ls -dF *(/)
HTML/ PDF/ PS/ Leer/
Nur Verzeichnisse mit Inhalt anzeigen:
kubijens@ppc210:~/TeXing/ > ls -d *(F)
HTML PDF PS
Ausführbare Dateien (*) oder Einträge mit einem x-Bit (x) anzeigen:
kubijens@ppc210:~/TeXing/ > ls -d *(*)
file12.aux file12.dvi file12.log file12.tex
kubijens@ppc210:~/TeXing/ > ls -d *(x)
file12.aux file12.dvi file12.log file12.tex HTML Leer PDF PS
Es gibt hier noch zahlreiche weitere Parameter. Alle sind in der Manpage zshexpn im Abschnitt “Filename Generation” aufgeführt. Ich kann euch nur empfehlen, mal ein wenig damit herumzuspielen. Ihr werdet sehr schnell sehen, was für ein mächtiges Werkzeug ihr damit an der Hand habt.
zsh lernen
Tip #3: Rechnen in der Shell
echo $AUSDRUCK | bc. Aber die Zsh hat ja Module. Unter anderem auch mathfunc. Dieses wird mittels zmodload zsh/mathfunc eingebunden und kann dann benutzt werden:
kubijens@qbiathome:~/ > echo $(( 1+2 )) 3 kubijens@qbiathome:~/ > echo $(( sin(1+2) )) 0.14112000805986721 kubijens@qbiathome:~/ > echo $(( sin(1+2) + sqrt(16) )) 4.14112000805986721 kubijens@qbiathome:~/ > (( a = sin(1+2) + sqrt(16) )) kubijens@qbiathome:~/ > echo $(( ceil(a) )) 5. kubijens@qbiathome:~/ > echo $(( rand48() )) 0.60922352992416506 kubijens@qbiathome:~/ > echo $(( rand48() )) 0.12633637755484983Es existieren noch eine Vielzahl an weiteren Funktionen. Diese finden sich alle in der Handbuchseite
zshmodules.
Tip #2: Durch Verzeichnisse navigieren
setopt autocd- Dies sorgt dafür, dass man Verzeichnisse wechseln kann, ohne jedes Mal cd einzugeben. Einfach den Namen am Prompt eingegeben und schon steht man im gewünschten Verzeichnis- Kurznamen für lange Verzeichnisse - Dies Zsh bietet sog. Named Directories. Hier kann man einem beliebigen Verzeichnis einen Kurznamen geben und dann einfach dahin wechseln. Beispiel:
pydoc=/usr/share/doc/python-doc/html. Um zu wechseln, reicht die Eingabe cd ~pydoc. Einfach und schnell - Verzeichnisse rotieren - Stell dir vor, du bist eine ganze Zeit zwischen verschiedenen Verzeichnissen gewechselt und möchtest nun den Weg zurück gehen. Was machst du? Ein Weg wäre, zwei Aliase zu nutzen:
alias -- +=’pushd +1’; alias -- -=’pushd -0’. Nun kannst du mit + <ENTER> bzw. - <ENTER> einfach hin und her wechseln.
Tip #1: Löschabfrage
zsh Tips
- der Homepage
- dem Wiki
- der FAQ
- oder von Mikas zsh-Seite