# contents: zsh(1) user RC file. # this file is sourced by all interactive shells # 1. Environment Vars {{{1 # ==================== # (sh|c)ould be set in .zshenv but /etc/zprofile blows $PATH away on Gentoo export LC_ALL="en_CA.UTF-8" export LANG="en_CA.UTF-8" # include my script directory in the path path=($HOME/bin /usr/local/bin /usr/local/sbin $path) export PATH="/usr/local/bin:/usr/local/sbin:$PATH" cdpath=(~) HOSTNAME=`hostname -s` source /sw/bin/init.sh KEYCHAIN_HOST=`hostname` # make Esc-h show individual zshbuiltins entries #HELPDIR=~/.zsh/help #unalias run-help #autoload -U run-help if [[ `uname` = "Linux" ]]; then export JAVA="/opt/blackdown-jdk-1.4.2/bin/java" export JAVA_HOME="/opt/blackdown-jdk-1.4.2" fi export PAGER="/usr/bin/less" # most has great colours for man pages if which most >/dev/null 2>&1; then export MANPAGER="/usr/bin/most" fi # default editors export EDITOR="mate -w" export VISUAL=$EDITOR # Dynamically build the $PATH variable #for dircomponent in /bin /sbin \ # /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin \ # /usr/games/bin /usr/X11R6/bin /usr/X11R6/sbin # do # if [[ -e $dircomponent ]]; then # path=($path $dircomponent) # fi #done typeset -U path # remove dups #unset dircomponent # 1}}} # 2. Limits {{{1 # ========= #limit coredumpsize 30m # limit core dumps to 30mb #limit stacksize 8m # limit stack to 8mb # 1}}} # 3. Shell Settings {{{1 # ================= # 3.1. Shell Directories {{{2 # ---------------------- hash -d mail=~/.maildir/ # 2}}} # 1}}} # 4. Shell Options {{{1 # ================ # 4.1. Parameters and Shell Functionality {{{2 # --------------------------------------- #setopt no_globalexport # don't be backwards compatible #setopt ignoreeof # ignore EOF ('^D') (i.e. don't log out on it) setopt braceccl # {a-d} expands to a b c d # 2}}} # 4.2. Changing Directories {{{2 # ------------------------- setopt autocd # automatically cd to a directory if not cmd setopt autopushd # automatically pushd directories on dirstack #setopt pushdignoredups # don't push dups on stack #setopt pushdsilent # be quiet about pushds and popds # 2}}} # 4.3. Shell Completion {{{2 # --------------------- #setopt automenu # use menu completion after 2 tabs #setopt completeinword # complete inside words setopt correct # try to correct spelling... setopt no_correctall # ...only for commands, not filenames #setopt no_listambiguous # only list matches if ambiguous setopt no_listbeep # don't beep on ambiguous listings setopt listpacked # diff col widths = less space # 2}}} # 4.4. Shell Expansion and Globbing {{{2 # --------------------------------- #setopt no_nomatch # don't generate 'no matches' error setopt extendedglob # use extended globbing (#, ~, ^) #setopt cshnullglob # overrides nomatch #setopt equals # expand =cmd (on by default) #setopt markdirs # append / to dir names generated by globbing # 2}}} # 4.5. History and History Expansion {{{2 # ---------------------------------- setopt extendedhistory # save timestamps in history setopt no_histbeep # don't beep for erroneous history expansions setopt no_histignorealldups # don't ignore dups in history setopt histignoredups # ignore consecutive dups in history setopt histsavenodups # don't save duplicates setopt histnostore # don't store history related functions #setopt incappendhistory # incrementally add items to hist. #setopt histverify #setopt sharehistory # imports from history file and exports (like incappendhistory) # 2}}} # 4.6. Job Control {{{2 # ---------------- setopt longlistjobs # list jobs in long format #setopt no_notify # report job status only before prompt printing # 2}}} # 4.7. Shell Prompt {{{2 # ----------------- #setopt promptsubst # allow paramater, command, so on in prompt # 2}}} # 4.8. ZLE {{{2 # -------- setopt no_beep # don't beep on errors (in ZLE) # 2}}} # 4.9. Input and Output {{{2 # --------------------- setopt no_flowcontrol # don't use flow control (^S/^Q) #setopt printeightbit # allow eight bit output for completion lists # 2}}} # 1}}} # 5. Terminal Settings {{{1 # ==================== # 5.1. Terminal Input {{{2 # ------------------- #stty -ixon # don't use flow control #stty pass8 # but do send 8-bit characters to terminal #unset TERMCAP # 2}}} # 5.2. Terminal Output {{{2 # -------------------- #case $TERM in # *screen*|rxvt|*xterm|aterm) echo -e -n "\033[10;0]\033[11;0]" ;; #esac # 2}}} # 5.3. Screen Title Updating {{{2 # -------------------------- function title { if [[ $TERM == "screen" ]]; then # Use these two for GNU Screen: print -nR $'\033k'$1$'\033'\\\ print -nR $'\033]0;'$2$'\a' elif [[ $TERM == "xterm" || $TERM == "rxvt" ]]; then # Use this one instead for XTerms: print -nR $'\033]0;'$*$'\a' fi } function precmd { title zsh "$PWD" print -n '\017' } function preexec { emulate -L zsh local -a cmd; cmd=(${(z)1}) title $cmd[1]:t "$cmd[2,-1]" } # 2}}} # 1}}} # 6. Modules {{{1 # ========== # 6.1. Default ZSH Modules {{{2 # ------------------------ # 2}}} # 6.2. ZFTP {{{2 # --------- # 2}}} # 1}}} # 7. Command-line Completion {{{1 # ========================== # 7.1. Startup {{{2 # ------------ autoload -U colors # we need the colors for some formats below colors # 2}}} # 7.2. Completion Styles {{{2 # ---------------------- # 7.2.1. Caching {{{3 # 3}}} # 7.2.2. Completers {{{3 # 3}}} # 7.2.3. Completer Options {{{3 # 3}}} # 7.2.4. Selection Display {{{3 # 3}}} # 7.2.5. Specific Commands {{{3 # 3}}} # 2}}} # 7.3. Completion Formats and Messages {{{2 # ------------------------------------ # 2}}} # 7.4. Completion Groups {{{2 # ---------------------- # 2}}} # 7.5. Completion Function Usage {{{2 # ------------------------------ # 2}}} # 7.6. History Completion {{{2 # ----------------------- # 2}}} # 1}}} # 8. ZLE Keybindings {{{1 # ================== # 8.1. Searching {{{2 bindkey '\ep' history-beginning-search-backward # 2}}} # 1}}} # 9. Function (Auto)loading {{{1 # ========================= # 9.1. Prompt Subsystem {{{2 # --------------------- # PROMPT SUBTITUTION # ------------------ # %l - tty %M - full machine hostname # %m - hostname %n - USERNAME # %y - tty w/ prefix %# - # or $ # %? - last exit code %d,%/ - PWD # %~ - ~ for home etc %h,%! - history event # # %j - # of jobs # # %B - bold %E - clear to EOL # %U - underline %S - standout # # %([n]x.true.false) '.' is arbitrary # 'x' can be: # ! - running with privs # # - effective uid is 'n' # ? exit status was 'n' # C # / - PWD has >= 'n' elements # c # . # ~ - PWD with prefix replacements has >= 'n' elements # D - month = 'n' (jan = 0) # d - day of month = 'n' # g - gid is 'n' # j - # jobs >= 'n' # l - 'n' chars already printed on line # T - hours = 'n' # t - minutes = 'n' # w - day of week = 'n' (sun = 0) #export PROMPT=$'%B%?%b %{\e[01;32m%}%n %{\e[01;34m%}%~ %# %{\e[0m%}' case $HOSTNAME in tuono) export PROMPT=$'%(?..%{\e[41;38m%}%B-%?-%b%{\e[0m%} )%(1j.%{\e[01;33m%}[%j] .)%{\e[01;44m%}%n@%m%{\e[0m%} %{\e[01;32m%}%3~%{\e[0m%} %B%#%b ' ;; mac-mini) export PROMPT=$'%(?..%{\e[41;38m%}%B-%?-%b%{\e[0m%} )%(1j.%{\e[01;33m%}[%j] .)%{\e[01;34m%}%n@%m%{\e[0m%} %{\e[01;32m%}%3~%{\e[0m%} %B%#%b ' ;; slick) export PROMPT=$'%(?..%{\e[41;38m%}%B-%?-%b%{\e[0m%} )%(1j.%{\e[01;33m%}[%j] .)%{\e[01;31m%}%n@%m%{\e[0m%} %{\e[01;32m%}%3~%{\e[0m%} %B%#%b ' ;; *) export PROMPT=$'%(?..%{\e[41;38m%}%B-%?-%b%{\e[0m%} )%(1j.%{\e[01;33m%}[%j] .)%{\e[01;32m%}%n@%m%{\e[0m%} %{\e[01;32m%}%3~%{\e[0m%} %B%#%b ' ;; esac #export RPROMPT=$'%{\e[01;31m%}[%!]%{\e[0m%}' # time & history # on right # 2}}} # 1}}} # 10. Aliases {{{1 # =========== # 10.1. Convenience Aliases/Macros {{{2 # -------------------------------- #alias burn='cdrecord -dao -driveropts=burnfree -dev=ATA:1,1,0 -v' alias cp='nocorrect cp' # don't correct spelling for 'cp' alias cron='crontab -e' #alias dispatch-conf='sudo dispatch-conf' #alias emerge='sudo emerge' # should've thought of this alias mkdir='nocorrect mkdir' # don't correct spelling for 'mkdir' alias mv='nocorrect mv' # don't correct spelling for 'mv' #alias ns='newscript' #alias perldoc='LC_ALL=en_US perldoc' #alias reboot='sudo shutdown -r now' #alias shutdown='sudo shutdown -h now' #alias ssh='ssh -X' #alias u='cd ..' #alias u2='cd ../..' #alias u3='cd ../../..' #alias u4='cd ../../../..' # ruby alias irb='irb --readline -r irb/completion' alias rii='ri -Tf ansi' # rails alias ss='./script/server' alias sc='./script/console' alias mig='rake migrate' alias gcon='./script/generate controller' alias gmod='./script/generate model' alias gmig='./script/generate migration' alias gsca='./script/generate scaffold' # svn alias sup='svn update' alias sst='svn status -u' alias scom='svn commit' alias slog='svn log | less' # textmate alias e='mate' alias et='mate .' # global aliases - work anywhere on line alias -g L='|less' alias -g G='|grep' alias -g SH='>/dev/null 2>&1' # suffix aliases, 'alias -s ps=gv' makes '*.ps' expand to 'gv *.ps' # (globbing done after alias expansion!) #alias -s c=gvim #alias -s h=gvim #alias -s py=gvim #alias -s html=gvim #alias -s css=gvim function cd () { if [[ -f $1 ]]; then builtin cd $1:h else builtin cd $1 fi } function cl () { cd $1 ls } # 2}}} # 10.2. ls Aliases {{{2 # ---------------- alias ls='ls -BF' alias la='/bin/ls -AF' alias ll='ls -l' alias lsd='ls -d' # 2}}} # 10.5. Miscellaneous Aliases {{{2 # --------------------------- # 2}}} # 1}}} # 11. Unsorted (new) stuff {{{1 # ======================== export HISTFILE="$ZDOTDIR/zhistory" # save history export HISTSIZE=100000 export SAVEHIST=100000 # huge history buffer # if commands takes more than 60 seconds tell me how long it took export REPORTTIME=60 # use less instead of the default more when no cmd is specified export READNULLCMD=less # use vim for info pages too #info() { vim "+Info $1" +only; } # set shell options setopt autonamedirs # % export h=/home/sjs; cd ~h; pwd # /home/sjs setopt no_badpattern # supress err msgs setopt cbases # 0xFF instead of 16#FF setopt cdablevars # blah=~/media/movies; cd blah; pwd => ~/media/movies #setopt globdots # match '.' implicitly setopt globsubst # parameter expns eligible for filename expn & generation setopt interactivecomments # comments allowed in interactive shells setopt no_hup # leave bg tasks running (a la nohup) #setopt multios # no more tee! (on by default) #setopt magicequalsubst # performs filename expansion on 'arg' part of # foo=arg parameters. #bindkey -v # vi style key bindings bindkey -e # emacs style key bindings bindkey '^I' complete-word # complete on tab, leave expansion to _expand # default in linux is backspace sends ^H, emacs no likey #stty erase '^?' TERMINFO=$HOME/.terminfo # tell gentoo's mozilla-launcher script to open tabs MOZILLA_NEWTYPE=tabs function keep { setopt localoptions nomarkdirs nonomatch nocshnullglob nullglob kept=() # Erase old value in case of error on next line kept=($~*) if [[ ! -t 0 ]]; then local line while read line; do kept+=( $line ) # += is a zsh 4.2+ feature done fi print -Rc - ${^kept%/}(T) } alias keep='noglob keep ' # 1}}} # more verbose completion prompt zstyle ':completion:*' format '%SCompleting %U%d%u%s' zstyle :completion::complete:cd:: tag-order \ local-directories path-directories # The following lines were added by compinstall zstyle ':completion:*' auto-description 'specify %d:' zstyle ':completion:*' completer _expand _complete _files zstyle ':completion:*' expand prefix #zstyle ':completion:*' format 'Complete %d:' zstyle ':completion:*' group-name '' zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s zstyle ':completion:*' list-suffixes true zstyle ':completion:*' matcher-list 'r:|[._-]=* r:|=*' 'r:|[._-]=* r:|=*' 'r:|[._-]=* r:|=*' 'r:|[._-]=* r:|=*' #zstyle ':completion:*' max-errors 2 zstyle ':completion:*' menu select=0 zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s zstyle ':completion:*' verbose true zstyle :compinstall filename '/home/sjs/.zsh/.zshrc' autoload -Uz compinit compinit # End of lines added by compinstall #autoload -u promptinit #promptinit #prompt gentoo if which keychain >/dev/null 2>&1; then /usr/bin/keychain ~/.ssh/id_rsa source ~/.keychain/${KEYCHAIN_HOST}-sh > /dev/null fi export LC_ALL="en_CA.UTF-8" export LANG="en_CA.UTF-8" # vim: set fdm=marker fdl=3 foldminlines=3 :