Re: zsh Goodies

Startseite
Anhänge:
Nachricht
+ (text/plain)
+ signature.asc (application/pgp-signature)
Nachricht löschen
Nachricht beantworten
Autor: Sebastian Harl
Datum:  
To: list
Betreff: Re: zsh Goodies
Hi,

On Mon, Jun 16, 2008 at 10:47:21PM +0200, Martin Steigerwald wrote:
> Am Montag 16 Juni 2008 schrieb Sebastian Harl:
> > Nachdem ich weiss, dass mindestens noch einer in der LUSC die Shell
> > zsh verwendet und diese an Features ja geradezu ueberladen ist, starte
> > ich hiermit einen Thread, der hoffentlich im Laufe der Zeit ein paar
> > nette Features von zsh sammelt - hoffe also auf Beitraege von anderen!
>
> Auch auf das Risiko hin, dass Einiges oder gar Alles bereits bekannt ist:


Dieses Risiko hat man immer, wenn man Infos verbreitet... ;-)

> # Optionen
> setopt sharehistory autocd beep extendedglob nomatch correct


Hmm... da hab ich fast ueberall das Gegenteil davon... ;-)

* sharehistory: siehe unten
* autocd: siehe unten
* beep: nervt mich ehrlich gesagt nur - ich hab das pcspkr Kernel-Modul
in der Regel in der Blacklist ;-)
* extendedglob: Sehr nett, hab ich mich aber noch net weiter eingelesen
* nomatch: Das verhindert Dinge wie "scp host:*.foo ." und ist deshalb
bei mir aus
* correct: Sehr nettes Feature, auch wenn ich mich noch nicht ganz
dran gewoehnt hab ;-)

> Insbesondere finde ich autocd interessant:
>
> martin@shambala> Amiga ~
> martin@shambala> System ~/Amiga


Ich mag Dinge meist lieber explizit - das ist hier der Fall. Ich kann
mir aber durchaus vorstellen, dass man dieses Feature mag.

Ich finde jedoch die "auto_pushd" Option sehr nett. Das setzt im Prinzip
"cd" mit "pushd" gleich, wodurch man sich jederzeit mit "popd"
rueckwaerts durch die zuletzt besuchten Verzeichnisse schlaengeln kann.

> Und "sharehistory"... ist etwas gewöhnungsbedürftig, aber ich mags im
> Grunde. Damit teilen sich alle Z-Shells eines Benutzers auf dem gleichen
> System eine History und es gibt keinen History-Überschreib-Ärger beim
> Beenden mehrerer Shells. Ich komme also mit Strg-R in einem Shell-Fenster
> an Befehle ran, die ich in einem anderen getippt habe. Beim Blättern mit
> der Hochtaste ist das manchmal verwirrend. Wär vielleicht witzig das nur
> für Strg-R einschalten zu können.


Das hab ich mal eine Weile verwendet, dann hat es mich aber genervt und
ich hab's wieder abgeschaltet. Ich arbeite haeufig in versch. Shells an
versch. Dingen, da ist das sehr unpraktisch. Ausserdem habe ich zum
Entwicklen meist mindestens zwei Shells mit versch. "Aufgaben", also
z.B. eine, um make aufzurufen, eine, um Dateien zu bearbeiten. Da finde
ich es sehr nervig, wenn ich mit <pfeil hoch> nicht zu meinem letzten
make Aufruf zurueck komme, sondern mich erst durch ein paar vim Aufrufe
durchblaettern muss - und "<ctrl>-r make" sind doch deutlich mehr
Tastenanschlaege als "<pfeil hoch><enter>"...

Ich habe statt dessen mittlerweile "inc_append_history" gesetzt. Das
schreibt die History (im Prinzip genauso wie "share_history") sofort in
die History-Datei, liest aber neue Eintraege nicht gleich wieder raus.
Laut der Doku von "append_history" soll man in diesem Fall mit "fc -RI"
die komplette History (also inkl. der Eintraege von anderen Instanzen)
einlesen koennen - das funktioniert aber bei mir bislang irgendwie
net...

> martin@shambala> grep -B1 PROMPT .zshrc ~
> # Prompt
> PROMPT="%(!,,%n@)%m> "
> --
> # Rechter Prompt
> RPROMPT=" %~%(?,,#%?)"
>
> komme ich im Moment wieder ab. Das ist einfach beim Cut&Paste blöde...
> wobei wenn ich das Fenster kleiner 70 Zeichen mache, gehts noch
> einigermaßen.


Wenn du die "transient_rprompt" Option setzt, dann taucht $RPROMPT nur in der aktuellen Zeile auf:

% echo foo
foo
% bar
zsh: correct 'bar' to 'bzr' [nyae]? a
% 2279 | 12:34PM

Damit finde ich das wieder ein sehr huebsches Feature.

> Was macht ihr Prompt-mäßig so?


Mein Prompt wird folgendermassen gestaltet:

autoload colors
colors

g="%{$fg[green]%}"
y="%{$fg[yellow]%}"
b="%{$fg[blue]%}"

r="%{$reset_color%}"

PROMPT="%B$g%n$r@%B$y%m$r:%B$b%1~%b$r%# "
RPROMPT="%B%!%b | %B%t%b"

> Witzig ist natürlich (auf den rechten Prompt achten):
>
> martin@shambala> true ~
> martin@shambala> false ~
> martin@shambala> find /toller-fehler ~#1
> find: "/toller-fehler": Datei oder Verzeichnis nicht gefunden
> martin@shambala> ls -lhgoijekjadng ~#1
> ls: Ungültige Option -- j
> »ls --help« gibt weitere Informationen.
> martin@shambala> ~#2
> martin@shambala> true ~#2
> martin@shambala> ~


Hmja... ich glaube, dass ist deutlich nuetzlicher, als sich die Nummer
des aktuellen History-Eintrags anzeigen zu lassen. Ich glaub, dass muss
ich mir noch mal genauer anschauen, was man da noch fuer Moeglichkeiten
hat :-)

> Die zsh kann rekursives Matching:


Das steht noch auf meiner TODO-Liste, mir das mal genauer anzusehen ;-)

Noch weitere Optionen, die ich sehr praktisch finde:

* auto_list, auto_menu: bei mehreren Completion-Moeglichkeiten wir nach
<tab><tab> ein Menue angezeigt, durch das man sich mit den
Pfeiltasten bewegen kann.
* equals: =foo wird ersetzt mit `which foo`, falls foo im Pfad
existiert

Gruss,
Sebastian

-- 
Sebastian "tokkee" Harl +++ GnuPG-ID: 0x8501C7FC +++ http://tokkee.org/


Those who would give up Essential Liberty to purchase a little Temporary
Safety, deserve neither Liberty nor Safety. -- Benjamin Franklin