###################################################################### # $HOME/.zshrc_workshop für die CLT 2005, W1, 10:00-13:00 Uhr # Basiert auf der .zshrc von Julius Plenz # Editiert von Sven Guckes und Julius Plenz. # http://chemnitzer.linux-tage.de/2005/tutorials/detail.html?idx=151 # Version: Sat Mar 05 00:30:00 CET 2005 ###################################################################### ###################################################################### # Generelle Umgebungsvariablen ###################################################################### export HOME=/home/gast # Erstellen! export PATH=$HOME/bin:/usr/local/bin:/usr/bin:/bin export CDPATH=.:..:$HOME export TMPDIR=$HOME/tmp export CC=gcc # Standard-Compiler: gcc export COLORTERM=yes # Farbe in Programmen # Editor, Pager und Browser - die einzig Wahren, Vim, less und Elinks! export EDITOR=vim export PAGER=less export BROWSER=elinks # Less-Optionen: skipscreenwhensearching,clear,quit@eof,ic,longprompt export LESS=aCeiM # # Lokalen: Toitsch! # export LC_C=de_DE # export LC_ALL=de_DE # export LC_CTYPE=de_DE # # Mails # export MAILPATH=$MAIL # export MAILCALL='New Mail in INBOX! ' # 30 Verzeichnisse passen auf den Stack, der automatisch bei # jedem 'cd' erweitert wird, allerdings nur, wenn die Option # 'auto_cd' gesetzt ist. # # Anzeige der Verzeichnisse mit 'd' (alias auf 'dirs -v'), # Verzeichniswechsel mit 'cd +Nummer'. DIRSTACKSIZE=30 HISTSIZE=2000 # Größe der History SAVEHIST=2000 # Maximale Anzahl der Einträge, die gespeichert werden HISTFILE=~/.zsh_history # Speicherort der History # Bei Verbesserungen folgende Nachfrage: # %R -> aktueller Befehl, # %r -> Verbesserungsvorschlag # SPROMPT='zsh: correct '%R' to '%r'? ([Y]es/[N]o/[E]dit/[A]bort) ' SPROMPT='zsh: korrigiere '%R' nach '%r'? ([Y]es/[N]o/[E]dit/[A]bort) ' # Farben, die 'ls' nutzen soll, werden auch in Completions genutzt (s.u.) export LS_COLORS='no=0:fi=0:di=32:ln=36:or=1;40:mi=1;40:pi=31:so=33:bd=44;37:cd=44;37:ex=35:*.jpg=1;32:*.jpeg=1;32:*.JPG=1;32:*.gif=1;32:*.png=1;32:*.jpeg=1;32:*.ppm=1;32:*.pgm=1;32:*.pbm=1;32:*.c=1;33:*.C=1;33:*.h=1;33:*.cc=1;33:*.awk=1;33:*.pl=1;33:*.bz2=1;35:*.gz=1;31:*.tar=1;31:*.zip=1;31:*.lha=1;31:*.lzh=1;31:*.arj=1;31:*.tgz=1;31:*.taz=1;31:*.html=1;34:*.htm=1;34:*.doc=1;34:*.txt=1;34:*.o=1;36:*.a=1;36:*.php3=1;31' # Einfaches, unfarbiges Prompt # %n Username # %m Maschinenname # %4c Die letzten 4 Verzeichnisse in $PWD export PS1="%n@%m:%4c> " ###################################################################### # Funktionen ###################################################################### # ... ###################################################################### # Funktionen, one-liner ###################################################################### # Google function google () { $BROWSER "http://www.google.com/search?q=$*"; } alias g=google # Google Groups function ggoogle () { $BROWSER "http://groups.google.com/groups?q=$*"; } # Search for Posting from function mggoogle () { $BROWSER \ "http://groups.google.com/groups?output=gplain&selm="$1"" ; } # # Stundenplan # function stundenplan { dog --no-header \ # http://www.hh.schule.de/christianeum/kl10c.htm \ # | html2text | cut -sd '|' -f1,2,4,5,6,7,8,9 | less } ###################################################################### # Optionen ###################################################################### setopt \ NO_all_export \ always_last_prompt \ NO_always_to_end \ append_history \ auto_cd \ auto_list \ auto_menu \ NO_auto_name_dirs \ auto_param_keys \ auto_param_slash \ auto_pushd \ auto_remove_slash \ NO_auto_resume \ bad_pattern \ bang_hist \ NO_beep \ brace_ccl \ correct_all \ NO_bsd_echo \ cdable_vars \ NO_chase_links \ NO_clobber \ complete_aliases \ complete_in_word \ correct \ correct_all \ csh_junkie_history \ NO_csh_junkie_loops \ NO_csh_junkie_quotes \ NO_csh_null_glob \ NO_dvorak \ equals \ extended_glob \ extended_history \ function_argzero \ glob \ NO_glob_assign \ glob_complete \ glob_dots \ glob_subst \ hash_cmds \ hash_dirs \ hash_list_all \ hist_allow_clobber \ hist_beep \ hist_ignore_dups \ hist_ignore_space \ NO_hist_no_store \ NO_hist_save_no_dups \ hist_verify \ NO_hup \ NO_ignore_braces \ NO_ignore_eof \ interactive_comments \ NO_list_ambiguous \ NO_list_beep \ list_types \ long_list_jobs \ magic_equal_subst \ NO_mail_warning \ NO_mark_dirs \ NO_menu_complete \ multios \ NO_nomatch \ notify \ NO_null_glob \ numeric_glob_sort \ NO_overstrike \ path_dirs \ posix_builtins \ NO_print_exit_value \ NO_prompt_cr \ prompt_subst \ pushd_ignore_dups \ NO_pushd_minus \ NO_pushd_silent \ pushd_to_home \ rc_expand_param \ NO_rc_quotes \ NO_rm_star_silent \ NO_sh_file_expansion \ sh_option_letters \ short_loops \ NO_sh_word_split \ NO_single_line_zle \ NO_sun_keyboard_hack \ unset \ NO_verbose \ NO_xtrace \ zle ###################################################################### # Aliase ###################################################################### # Das wichtigste zuerst: Schnelle Einrichtung von Aliasen. Auch das # Anschauen ist möglich: a alias a=alias alias ua=unalias # Job-Control: Schnelles In-Den-Vordergrund-Bringen alias 1='fg %1' alias 2='fg %2' alias 3='fg %3' alias 4='fg %4' alias 5='fg %5' alias 6='fg %6' # ...und wieder zurück! alias 11='bg %1' alias 22='bg %2' alias 33='bg %3' alias 44='bg %4' alias 55='bg %5' alias 66='bg %6' # Alle Jobs anzeigen alias j='jobs -l' # Auf dem ganzen Rechner, alle Prozesse, in Baumstruktur alias px='ps aufx' # Schnelle wechseln nach oben alias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' alias .....='cd ../../../..' # Siehe 'DIRSTACKSIZE' alias d='dirs -v' # Kurzform.. alias l='less' alias v='vim' # ... und als global Alias. Beispiel: sed '...' file P -> sed ... | less alias -g L='| less' alias -g V='| vim -' alias -g P='|' # # Speichert Nethack-Dateien, so dass nach einem Tod des Spielers die # # Dateien wieder zurückkopiert werden können. "cheating" # alias nethacksave='cp lib/nethackdir/save/* ~/nethack' # Drei wichtige gpg-Kommandos schnell ausführen: # gget: get key # gput: key hochladen # glist: key mit fingerprint anzeigen alias gget='gpg --recv-keys' alias gput='gpg --send-keys' alias glist='gpg --fingerprint --list-keys' # Die letzten zehn neuen... alias lsnew='ls -rtl *(.) | tail' # ...und alten Dateien anschauen. Oft benötigt! alias lsold='ls -tl *(.) | tail' # Rechtevergabe! alias rw-='chmod 600' alias rwx='chmod 700' alias r--='chmod 644' alias r-x='chmod 755' # ls hier und da. ls ist wichtig! alias ls='ls --color=auto' # Farbe. Wichtig! Benutzt $LS_COLORS alias la='ls -a' # Mit Dotfiles alias ll='ls -lA' # Almost all (ohne . und ..) in Listenform # "There are two major products that come out of Berkeley: LSD and UNIX. # We don't belive this to be a coincidence." -- Jeremy S. Anderson alias lsd='ls -d' # lsd .vim -> .vim, nicht den Inhalt alias sl=ls # Verschreiber # Zeigt an, wer sonst noch online ist, abgesehen von mir. alias online="w | grep -v $USER | $PAGER" # screen(1) - das Wichtigste überhaupt! Ohne screen ist das Arbeiten # nur mit der Shell und Texttools kaum möglich! alias S='screen' # screen alias sr='screen -r' # reattach alias sls='screen -ls' # list attached, detached and dead screens alias sx='screen -x' # Eine Attachte screensession 'betrachten' # grep(1) per default mit # --color=auto: Den matches farbig (rot) markiert und # -i: Caseinsentisitver Suche. grep x grept auch X. alias grep='grep -i --color=auto' # # make && configure # alias C='CDPATH="" ./configure' # alias CH='C --help | less' # Hilfeoptionen in less lesen # alias Chome="C --prefix=$HOME" # Configure mit Installation nach $HOME # # das CDPATH="" ist wichtig, damit 'make' bei einem 'cd src' in # # ./src landet und nicht in ~/src... # alias make='CDPATH="" make' # alias W='wget' # alias mirror="noglob wget --mirror --no-parent --convert-links" # # Browser - die wichtigsten 4 # alias D='dillo' # alias EL='noglob elinks' # alias F='mozilla-firefox' # alias O='opera -newpage' # sonstige Aliase alias aumix='DISPLAY= LC_ALL=C aumix' # aumix - nichtgrafisch! alias bq='boxes -d boxquote' alias burn-iso='cdrecord -v -dao dev=0,1,0 speed=24' # Iso brennen alias cicq='centericq -a' # centericq mit ascii-rahmen # alias man="TERM=mostlike man" # man hat less mit tollem terminfo als Pager alias md='mkdir -p' # make parent, no errors alias oo='openoffice' # # Eigene IP im WAN rausfinden, wenn man hinter einem Router sitzt. # alias myip='lynx -dump checkip.dyndns.org | sed "s/[^0-9]*//" | fgrep .' # # Schnelles konvertieren von Bildernin Thumbnails. # alias _GIF='convert -verbose -interlace LINE' # alias _thumb='convert -geometry 100x100 -interlace LINE -verbose' # alias _thumb150='convert -geometry 150x150 -interlace LINE -verbose' # alias _thumb200='convert -geometry 200x200 -interlace LINE -verbose' # Editieren und Neuladen der .zshrc alias __='$EDITOR ~/.zshrc' alias ___='source ~/.zshrc' # # RTFM. Aber schnell. # alias Mslrn='zless /usr/share/doc/slrn/manual.txt.gz' # alias Mmutt='zless /usr/share/doc/mutt/manual.txt.gz' # alias Mirssi='zless /usr/share/doc/irssi-text/manual.txt.gz' # alias Mncurses='man ncurses | less -p "Routine Name Index"'; # # XKBMap setzen. Deutsch, Russisch und US-Layout. # # http://www.plenz.com/tmp/tastatur.jpg # alias kru='setxkbmap ru' # alias kus='setxkbmap us' # alias kde='setxkbmap de' # # Standard. Toggle zwischen Russisch und US mit beiden Control-Tasten gleichzeitig. # alias kstd='setxkbmap -layout de,ru -variant nodeadkeys -option \ # "grp:ctrls_toggle,grp_led:scroll"' ###################################################################### # Modules ###################################################################### # Tetris!! autoload -U tetris zle -N tetris bindkey "^Xt" tetris ## C-x t to play ###################################################################### # Completions ###################################################################### # Viele vorinstallierte Completions für *diverse* Programme. # Dauert einige Zeit zum Laden, ca. 0.5 sec. autoload -U compinit ; compinit # U.A. farbige Completion zmodload -i zsh/complist # Diese Dateiendungen werden bei der Completion von Dateinamen # ignoriert, wenn man diese Dateinamen trotzdem haben will, muss # man sie manuell ohne Completion eingeben. fignore=( .BAK .bak .alt .old .aux .toc .swp \~) # Make: Completion für die gängigen Aktionen. compile=(install clean remove uninstall deinstall) compctl -k compile make # cd & co.: Nur in Verzeichnisse. compctl -g '*(-/)' + -g '.*(/)' cd chdir dirs pushd rmdir dircmp cl # tar & co.: Nur Archivdateien und Verzeichnisse. compctl -g '*.(gz|z|Z|t[agp]z|tarZ|tz)' + -g '*(-/)' gunzip gzcat zcat # Soundprogramme: Sounds + Playlisten + Verzeichnisse. compctl -g '*.(mp3|MP3|ogg|OGG|temp|TEMP|m3u|pls)' + -g '*(-/)' mpg123 xmms EP # Browser: Nur HTML-Seiten und Verzeichnisse. compctl -g "*.html *.htm" + -g "*(-/) .*(-/)" + -H 0 '' w3m lynx elinks wget opera EL O # xpdf: Nur PDFs und Verzeichnisse. compctl -g '*.(pdf|PDF)' + -g '*(-/)' xpdf pdf2ps # Bilderanzeige: Nur Bilder und Verzeichnisse. compctl -g '*.(jpg|JPG|jpeg|JPEG|gif|GIF|png|PNG|bmp)' + -g '*(-/)' gimp xv display gqview # xdvi: DVIs und Verzeichnisse. compctl -g '*.dvi' + -g '*(-/)' dvips xdvi gxdvi # lp und gv: Postscript-Dateien und Verzeichnisse. compctl -g '*.ps' + -g '*(-/)' lp gv # Maximal zwei Fehler pro Kommando. # zstyle ':completion:*:correct:*' max-errors 2 numeric # Fügt den ursprünglich eingegebenen String auch als Completion auf. zstyle ':completion:*:correct:*' original true zstyle ':completion:*:correct:*' insert-unambiguous true # RTFM :P # Welche Funktionen sollen zur Vervollständigung genutzt werden? zstyle ':completion:*' completer _complete _correct _approximate # Globbing zstyle ':completion:*' glob true # Verbose. Immer doch! zstyle ':completion:*' verbose yes # Format der Corrections, Warnungen, etc. zstyle ':completion:*:corrections' format $'%{\e[0;31m%}%d (errors: %e)%{\e[0m%}' zstyle ':completion:*:descriptions' format $'%{\e[0;31m%}%d%{\e[0m%}' zstyle ':completion:*:messages' format $'%{\e[0;31m%}%d%{\e[0m%}' zstyle ':completion:*:warnings' format $'%{\e[0;31m%}No matches for: %d%{\e[0m%}' zstyle ':completion:*' group-name '' zstyle -e ':completion:*:approximate:*' max-errors \ 'reply=( $(( ($#PREFIX+$#SUFFIX)/3 )) numeric )' zstyle ':completion:*' list-colors '' zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS} # Bei der Completion: Menü mit inversen aktiven Einträgen. Cool! zstyle ':completion:*' menu yes=long-list zstyle ':completion:*' menu select=2 # Completions für einige Programme: # SSH - Erst User, dann Host. zstyle ':completion:*:ssh:*' group-order 'users' 'hosts' # rm - Reihenfolge: Erst Backupdateien, dann Bytecompiled Files, # danach core-Files, erst dann restliche Dateien. zstyle ':completion:*:*:rm:*' file-patterns '(*~|\\#*\\#):backup-files' \ '*.zwc:zsh\ bytecompiled\ files' 'core(|.*):core\ files' '*:all-files' # kill - unglaubliche Completions! zstyle ':completion:*:kill:*' command 'ps -u $USER -o pid,%cpu,tty,cputime,cmd' zstyle ':completion:*:kill:*' insert-ids single zstyle ':completion:*:*:kill:*' menu yes select zstyle ':completion:*:kill:*' force-list always # less und mutt: Umfangreiches Menü. zstyle ':completion:*:*:less:*' menu yes select zstyle ':completion:*:*:mutt:*' menu yes select ###################################################################### # Keybindings. ###################################################################### # Standardmäßige vi-Keybindings. bindkey -e # Wie auf anderen Shells Standard # Home- und End-Keys. bindkey '\e[1~' beginning-of-line bindkey '\e[4~' end-of-line # 2005-02-27: Navigation im Completion-Menü. GENIAL! # Navigation in der Completion-Liste (Tab-Tab): hjkl wählt aus, Return fügt ein # und beendet das Menü (wobei es weiterhin angezeigt wird) und i fügt ein und # lässt das Menü offen, um eine weitere Vervollständigung einzufügen. # Die Befehle funktionieren nur, *nachdem* zsh/complist geladen wurde! bindkey -M menuselect 'h' vi-backward-char # links bindkey -M menuselect 'j' vi-down-line-or-history # unten bindkey -M menuselect 'k' vi-up-line-or-history # oben bindkey -M menuselect 'l' vi-forward-char # rechts # Fügt die Completion auf der Kommandozeile ein, lässt aber das Menü # für eine Weitere Vervollständigung offen. bindkey -M menuselect 'i' accept-and-menu-complete # Fügt die Completion auf der Kommandozeile ein und zeigt dann ein # Menü mit weiterhin möglichen Completions. "Engere Auswahl" bindkey -M menuselect 'o' accept-and-infer-next-history ###################################################################### # Hashs ###################################################################### # # cd B -> cd ~/bin # hash -d B=~/bin # hash -d M=~/.mutt # hash -d W=~/www # hash -d I=~/.irclogs # hash -d R=~/src/ruby # hash -d P=~/src/perl # hash -d N=~/News # hash -d T=~/tmp ###################################################################### # Sonstiges ###################################################################### # # Startup: Läuft screen? Wenn ja, dann de-re-attach. So wird screen # # immer automatisch gestartet, aber nicht, wenn eine Shell *innerhalb* # # screens gestartet wird... # if [[ $(screen -ls | wc -l) == 4 ]] # then # if [[ $(echo $STY | grep -c `hostname` ) == 0 ]] # then # sleep 2 # Willkommensnachricht lesen... # /usr/bin/screen -d -r # fi # fi # Umask: Wird für gewöhmlich bei der Erstellung von Dateien von 0777 bzw. 0666 # abgezogen. 0666-066 = 0600 -> -rw-------; 0777-066 = 0711 -> -rwx--x--x umask 066 # # Benachrichtigung darüber, wer Shells öffnet und schließt. Nervig. ;) # watch=(notme) # LOGCHECK=120 # WATCHFMT='%n %a %l from %m at %t.' # EOF # vim:set sw=2 nowrap: