# Filename: /etc/skel/.zshrc # Purpose: config file for zsh (z shell) # Authors: (c) grml-team (grml.org) # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2 or any later version. ################################################################################ # Nowadays, grml's zsh setup lives in only *one* zshrc file. # That is the global one: /etc/zsh/zshrc (from grml-etc-core). # It is best to leave *this* file untouched and do personal changes to # your zsh setup via ${HOME}/.zshrc.local which is loaded at the end of # the global zshrc. # # That way, we enable people on other operating systems to use our # setup, too, just by copying our global zshrc to their ${HOME}/.zshrc. # Adjustments would still go to the .zshrc.local file. ################################################################################ ## Inform users about upgrade path for grml's old zshrc layout, assuming that: ## /etc/skel/.zshrc was installed as ~/.zshrc, ## /etc/zsh/zshrc was installed as ~/.zshrc.global and ## ~/.zshrc.local does not exist yet. if [ -r ~/.zshrc -a -r ~/.zshrc.global -a ! -r ~/.zshrc.local ] ; then printf '-!-\n' printf '-!- Looks like you are using the old zshrc layout of grml.\n' printf '-!- Please read the notes in the grml-zsh-refcard, being' printf '-!- available at: http://grml.org/zsh/\n' printf '-!-\n' printf '-!- If you just want to get rid of this warning message execute:\n' printf '-!- touch ~/.zshrc.local\n' printf '-!-\n' fi ## Settings for umask #if (( EUID == 0 )); then # umask 002 #else # umask 022 #fi ## Now, we'll give a few examples of what you might want to use in your ## .zshrc.local file (just copy'n'paste and uncomment it there): ## Prompt theme extension ## # Virtualenv support #function virtual_env_prompt () { # REPLY=${VIRTUAL_ENV+(${VIRTUAL_ENV:t}) } #} #grml_theme_add_token virtual-env -f virtual_env_prompt '%F{magenta}' '%f' #zstyle ':prompt:grml:left:setup' items rc virtual-env change-root user at host path vcs percent ## ZLE tweaks ## ## use the vi navigation keys (hjkl) besides cursor keys in menu completion #bindkey -M menuselect 'h' vi-backward-char # left #bindkey -M menuselect 'k' vi-up-line-or-history # up #bindkey -M menuselect 'l' vi-forward-char # right #bindkey -M menuselect 'j' vi-down-line-or-history # bottom ## set command prediction from history, see 'man 1 zshcontrib' #is4 && zrcautoload predict-on && \ #zle -N predict-on && \ #zle -N predict-off && \ #bindkey "^X^Z" predict-on && \ #bindkey "^Z" predict-off ## press ctrl-q to quote line: #mquote () { # zle beginning-of-line # zle forward-word # # RBUFFER="'$RBUFFER'" # RBUFFER=${(q)RBUFFER} # zle end-of-line #} #zle -N mquote && bindkey '^q' mquote ## define word separators (for stuff like backward-word, forward-word, backward-kill-word,..) #WORDCHARS='*?_-.[]~=/&;!#$%^(){}<>' # the default #WORDCHARS=. #WORDCHARS='*?_[]~=&;!#$%^(){}' #WORDCHARS='${WORDCHARS:s@/@}' # just type '...' to get '../..' #rationalise-dot() { #local MATCH #if [[ $LBUFFER =~ '(^|/| | |'$'\n''|\||;|&)\.\.$' ]]; then # LBUFFER+=/ # zle self-insert # zle self-insert #else # zle self-insert #fi #} #zle -N rationalise-dot #bindkey . rationalise-dot ## without this, typing a . aborts incremental history search #bindkey -M isearch . self-insert #bindkey '\eq' push-line-or-edit ## some popular options ## ## add `|' to output redirections in the history #setopt histallowclobber ## try to avoid the 'zsh: no matches found...' #setopt nonomatch ## warning if file exists ('cat /dev/null > ~/.zshrc') #setopt NO_clobber ## don't warn me about bg processes when exiting #setopt nocheckjobs ## alert me if something failed #setopt printexitvalue ## with spelling correction, assume dvorak kb #setopt dvorak ## Allow comments even in interactive shells #setopt interactivecomments ## if a new command line being added to the history list duplicates an older ## one, the older command is removed from the list #is4 && setopt histignorealldups ## compsys related snippets ## ## changed completer settings #zstyle ':completion:*' completer _complete _correct _approximate #zstyle ':completion:*' expand prefix suffix ## another different completer setting: expand shell aliases #zstyle ':completion:*' completer _expand_alias _complete _approximate ## to have more convenient account completion, specify your logins: #my_accounts=( # {grml,grml1}@foo.invalid # grml-devel@bar.invalid #) #other_accounts=( # {fred,root}@foo.invalid # vera@bar.invalid #) #zstyle ':completion:*:my-accounts' users-hosts $my_accounts #zstyle ':completion:*:other-accounts' users-hosts $other_accounts ## add grml.org to your list of hosts #hosts+=(grml.org) #zstyle ':completion:*:hosts' hosts $hosts ## telnet on non-default ports? ...well: ## specify specific port/service settings: #telnet_users_hosts_ports=( # user1@host1: # user2@host2: # @mail-server:{smtp,pop3} # @news-server:nntp # @proxy-server:8000 #) #zstyle ':completion:*:*:telnet:*' users-hosts-ports $telnet_users_hosts_ports ## the default grml setup provides '..' as a completion. it does not provide ## '.' though. If you want that too, use the following line: #zstyle ':completion:*' special-dirs true ## aliases ## ## translate #alias u='translate -i' ## ignore ~/.ssh/known_hosts entries #alias insecssh='ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null" -o "PreferredAuthentications=keyboard-interactive"' ## global aliases (for those who like them) ## #alias -g '...'='../..' #alias -g '....'='../../..' #alias -g BG='& exit' #alias -g C='|wc -l' #alias -g G='|grep' #alias -g H='|head' #alias -g Hl=' --help |& less -r' #alias -g J='|jq' #alias -g K='|keep' #alias -g L='|less' #alias -g LL='|& less -r' #alias -g M='|most' #alias -g N='&>/dev/null' #alias -g R='| tr A-z N-za-m' #alias -g SL='| sort | less' #alias -g S='| sort' #alias -g T='|tail' #alias -g V='| vim -' ## instead of global aliase it might be better to use grmls $abk assoc array, whose contents are expanded after pressing ,. #$abk[SnL]="| sort -n | less" ## get top 10 shell commands: #alias top10='print -l ${(o)history%% *} | uniq -c | sort -nr | head -n 10' ## Execute \kbd{./configure} #alias CO="./configure" ## Execute \kbd{./configure --help} #alias CH="./configure --help" ## miscellaneous code ## ## Use a default width of 80 for manpages for more convenient reading #export MANWIDTH=${MANWIDTH:-80} ## Set a search path for the cd builtin #cdpath=(.. ~) ## variation of our manzsh() function; pick you poison: #manzsh() { /usr/bin/man zshall | most +/"$1" ; } ## Switching shell safely and efficiently? http://www.zsh.org/mla/workers/2001/msg02410.html #bash() { # NO_SWITCH="yes" command bash "$@" #} #restart () { # exec $SHELL $SHELL_ARGS "$@" #} ## Handy functions for use with the (e::) globbing qualifier (like nt) #contains() { grep -q "$*" $REPLY } #sameas() { diff -q "$*" $REPLY &>/dev/null } #ot () { [[ $REPLY -ot ${~1} ]] } ## get_ic() - queries imap servers for capabilities; real simple. no imaps #ic_get() { # emulate -L zsh # local port # if [[ ! -z $1 ]] ; then # port=${2:-143} # print "querying imap server on $1:${port}...\n"; # print "a1 capability\na2 logout\n" | nc $1 ${port} # else # print "usage:\n $0 [port]" # fi #} ## List all occurrences of programm in current PATH #plap() { # emulate -L zsh # if [[ $# = 0 ]] ; then # echo "Usage: $0 program" # echo "Example: $0 zsh" # echo "Lists all occurrences of program in the current PATH." # else # ls -l ${^path}/*$1*(*N) # fi #} ## Find out which libs define a symbol #lcheck() { # if [[ -n "$1" ]] ; then # nm -go /usr/lib/lib*.a 2>/dev/null | grep ":[[:xdigit:]]\{8\} . .*$1" # else # echo "Usage: lcheck " >&2 # fi #} ## Download a file and display it locally #uopen() { # emulate -L zsh # if ! [[ -n "$1" ]] ; then # print "Usage: uopen \$URL/\$file">&2 # return 1 # else # FILE=$1 # MIME=$(curl --head $FILE | \ # grep Content-Type | \ # cut -d ' ' -f 2 | \ # cut -d\; -f 1) # MIME=${MIME%$'\r'} # curl $FILE | see ${MIME}:- # fi #} ## Memory overview #memusage() { # ps aux | awk '{if (NR > 1) print $5; # if (NR > 2) print "+"} # END { print "p" }' | dc #} ## print hex value of a number #hex() { # emulate -L zsh # if [[ -n "$1" ]]; then # printf "%x\n" $1 # else # print 'Usage: hex ' # return 1 # fi #} ## log out? set timeout in seconds... ## ...and do not log out in some specific terminals: #if [[ "${TERM}" == ([Exa]term*|rxvt|dtterm|screen*) ]] ; then # unset TMOUT #else # TMOUT=1800 #fi ## associate types and extensions (be aware with perl scripts and anwanted behaviour!) #check_com zsh-mime-setup || { autoload zsh-mime-setup && zsh-mime-setup } #alias -s pl='perl -S' ## ctrl-s will no longer freeze the terminal. #stty erase "^?" ## you want to automatically use a bigger font on big terminals? #if [[ "$TERM" == "xterm" ]] && [[ "$LINES" -ge 50 ]] && [[ "$COLUMNS" -ge 100 ]] && [[ -z "$SSH_CONNECTION" ]] ; then # large #fi ## Some quick Perl-hacks aka /useful/ oneliner #bew() { perl -le 'print unpack "B*","'$1'"' } #web() { perl -le 'print pack "B*","'$1'"' } #hew() { perl -le 'print unpack "H*","'$1'"' } #weh() { perl -le 'print pack "H*","'$1'"' } #pversion() { perl -M$1 -le "print $1->VERSION" } # i. e."pversion LWP -> 5.79" #getlinks () { perl -ne 'while ( m/"((www|ftp|http):\/\/.*?)"/gc ) { print $1, "\n"; }' $* } #gethrefs () { perl -ne 'while ( m/href="([^"]*)"/gc ) { print $1, "\n"; }' $* } #getanames () { perl -ne 'while ( m/a name="([^"]*)"/gc ) { print $1, "\n"; }' $* } #getforms () { perl -ne 'while ( m:(\):gic ) { print $1, "\n"; }' $* } #getstrings () { perl -ne 'while ( m/"(.*?)"/gc ) { print $1, "\n"; }' $*} #getanchors () { perl -ne 'while ( m/«([^«»\n]+)»/gc ) { print $1, "\n"; }' $* } #showINC () { perl -e 'for (@INC) { printf "%d %s\n", $i++, $_ }' } #vimpm () { vim `perldoc -l $1 | sed -e 's/pod$/pm/'` } #vimhelp () { vim -c "help $1" -c on -c "au! VimEnter *" } ## END OF FILE #################################################################