# ========================================================================== # paradigm's .zshrc # ========================================================================== # ========================================================================== # general zsh settings # ========================================================================== # new files default to only owner having rwx umask 077 # cd into directory just by directory name setopt autocd # prompt to correct typos setopt correctall # additional glob options setopt extendedglob # shut up setopt nobeep # don't change nice for bg tasks setopt nobgnice # don't use ctrl-s/q to control program flow setopt noflowcontrol # disable flow control completely stty -ixon # don't kill proc's in the bg when closing shell setopt nohup # don't warn about jobs in bg when closing shell setopt nocheckjobs # don't record repeated things in history setopt histignoredups # allows comments in commands setopt interactivecomments # extended globbing setopt extendedglob # consider / a word break, for ctrl-w WORDCHARS=${WORDCHARS//\/} # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # custom zle widgets # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # prepend sudo prepend-sudo() { if [[ $BUFFER != "sudo "* ]]; then BUFFER="sudo $BUFFER"; CURSOR+=5 fi } zle -N prepend-sudo # prepend vim prepend-vim() { if [[ $BUFFER != "vim "* ]]; then BUFFER="vim $BUFFER"; CURSOR+=5 fi } zle -N prepend-vim # delete's a block between two characters delete-in() { local CHAR LCHAR RCHAR LSEARCH RSEARCH COUNT read -k CHAR if [[ $CHAR == "w" ]];then zle vi-backward-word LSEARCH=$CURSOR zle vi-forward-word RSEARCH=$CURSOR RBUFFER="$BUFFER[$RSEARCH+1,${#BUFFER}]" LBUFFER="$LBUFFER[1,$LSEARCH]" return elif [[ $CHAR == "(" ]] || [[ $CHAR == ")" ]];then LCHAR="(" RCHAR=")" elif [[ $CHAR == "[" ]] || [[ $CHAR == "]" ]];then LCHAR="[" RCHAR="]" elif [[ $CHAR == "{" ]] || [[ $CHAR == "}" ]];then LCHAR="{" RCHAR="}" else LSEARCH=${#LBUFFER} while [[ $LSEARCH -gt 0 ]] && [[ "$LBUFFER[$LSEARCH]" != "$CHAR" ]]; do (( LSEARCH = $LSEARCH - 1 )) done RSEARCH=0 while [[ $RSEARCH -lt (( ${#RBUFFER} + 1 )) ]] && [[ "$RBUFFER[$RSEARCH]" != "$CHAR" ]]; do (( RSEARCH = $RSEARCH + 1 )) done RBUFFER="$RBUFFER[$RSEARCH,${#RBUFFER}]" LBUFFER="$LBUFFER[1,$LSEARCH]" return fi COUNT=1 LSEARCH=${#LBUFFER} while [[ $LSEARCH -gt 0 ]] && [[ $COUNT -gt 0 ]]; do (( LSEARCH = $LSEARCH - 1 )) if [[ $LBUFFER[$LSEARCH] == "$RCHAR" ]];then (( COUNT = $COUNT + 1 )) fi if [[ $LBUFFER[$LSEARCH] == "$LCHAR" ]];then (( COUNT = $COUNT - 1 )) fi done COUNT=1 RSEARCH=0 while [[ $RSEARCH -lt (( ${#RBUFFER} + 1 )) ]] && [[ $COUNT -gt 0 ]]; do (( RSEARCH = $RSEARCH + 1 )) if [[ $RBUFFER[$RSEARCH] == "$LCHAR" ]];then (( COUNT = $COUNT + 1 )) fi if [[ $RBUFFER[$RSEARCH] == "$RCHAR" ]];then (( COUNT = $COUNT - 1 )) fi done RBUFFER="$RBUFFER[$RSEARCH,${#RBUFFER}]" LBUFFER="$LBUFFER[1,$LSEARCH]" } zle -N delete-in change-in() { zle delete-in zle vi-insert } zle -N change-in delete-around() { zle delete-in zle vi-backward-char zle vi-delete-char zle vi-delete-char } zle -N delete-around change-around() { zle delete-in zle vi-backward-char zle vi-delete-char zle vi-delete-char zle vi-insert } zle -N change-around # increment-number increment-number() { emulate -L zsh setopt extendedglob local pos num newnum sign buf if [[ $BUFFER[$((CURSOR + 1))] = [0-9] ]]; then pos=$((${#LBUFFER%%[0-9]##} + 1)) else pos=$(($CURSOR + ${#RBUFFER%%[0-9]*} + 1)) fi (($pos <= ${#BUFFER})) || return num=${${BUFFER[$pos,-1]}%%[^0-9]*} if ((pos > 0)) && [[ $BUFFER[$((pos - 1))] = '-' ]]; then num=$((0 - num)) ((pos--)) fi newnum=$((num + ${NUMERIC:-${incarg:-1}})) if ((pos > 1)); then buf=${BUFFER[0,$((pos - 1))]}${BUFFER[$pos,-1]/$num/$newnum} else buf=${BUFFER/$num/$newnum} fi BUFFER=$buf CURSOR=$((pos + $#newnum - 2)) } zle -N increment-number # decrement-number decrement-number() { emulate -L zsh setopt extendedglob local pos num newnum sign buf if [[ $BUFFER[$((CURSOR + 1))] = [0-9] ]]; then pos=$((${#LBUFFER%%[0-9]##} + 1)) else pos=$(($CURSOR + ${#RBUFFER%%[0-9]*} + 1)) fi (($pos <= ${#BUFFER})) || return num=${${BUFFER[$pos,-1]}%%[^0-9]*} if ((pos > 0)) && [[ $BUFFER[$((pos - 1))] = '-' ]]; then num=$((0 - num)) ((pos--)) fi newnum=$((num - ${NUMERIC:-${incarg:-1}})) if ((pos > 1)); then buf=${BUFFER[0,$((pos - 1))]}${BUFFER[$pos,-1]/$num/$newnum} else buf=${BUFFER/$num/$newnum} fi BUFFER=$buf CURSOR=$((pos + $#newnum - 2)) } zle -N decrement-number # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # completion # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # autoload completion stuff autoload -U compinit && compinit # cache, speed things up zstyle ':completion:*' use-cache on # location for cache zstyle ':completion:*' cache-path ~/.zsh/cache/$HOST/ # show menu after a few tabs zstyle ':completion:*' menu select # shows how it's helping zstyle ':completion:*:descriptions' format '%U%B%d%b%u' # pretty error zstyle ':completion:*:warnings' format 'Sorry, no matches for: %d%b' # list files/folders in color zstyle ':completion:*' list-colors '' # don't tab complete to cd back into current directory zstyle ':completion:*:cd:*' ignore-parents parent pwd # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # keybindings # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # vi-style keybindings bindkey -v # vi-backward-kill-word bindkey "^W" backward-kill-word # vi-backward-delete-char bindkey "^H" backward-delete-char # vi-kill-line bindkey "^U" backward-kill-line # vi-backward-delete-char bindkey "^?" backward-delete-char # temporarily save line contents bindkey "^Y" push-line # ctrl-p to go pull up last line bindkey "^P" up-line-or-history # ctrl-n to go pull up next line bindkey "^N" down-line-or-history # search in history bindkey -M viins "^R" history-incremental-search-backward # insert-mode ctrl-e end of line bindkey -M viins "^E" end-of-line # insert mode, then ctrl-e bindkey -M vicmd "^E" vi-add-eol # insert-mode ctlr-a beg of line bindkey -M viins "^A" beginning-of-line # undo last undo bindkey -M vicmd "^R" redo # show cursor position info bindkey -M vicmd "ga" what-cursor-position # swap case over movement bindkey -M vicmd "g~" vi-oper-swap-case # no escape timeout viins bindkey -rpM viins '^[' # no escape timeout vicmd bindkey -rpM vicmd '^[' # prepend sudo bindkey "^S" prepend-sudo # prepend vim bindkey "^V" prepend-vim # delete block bindkey -M vicmd "di" delete-in # delete block, go viins bindkey -M vicmd "ci" change-in # delete block bindkey -M vicmd "da" delete-around # delete block, go viins bindkey -M vicmd "ca" change-around # incremement number under cursr bindkey -M vicmd "^A" increment-number # incremement number under cursr bindkey -M vicmd "^X" decrement-number # ========================================================================== # environmental variables # ========================================================================== # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # general settings # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Sets vim as editor export EDITOR="vim" # sets zsh as shell export SHELL="/bin/zsh" # if in X11, set firefox as browser # else, set elinks as browser if [[ -z $DISPLAY ]]; then export BROWSER="elinks" else export BROWSER="firefox" fi # ensures programs know to use 256-colors if [[ $TERM == "xterm" ]]; then export TERM="xterm-256color" elif [[ $TERM == "screen" ]]; then export TERM="screen-256color" fi # sets vim as pager export PAGER="sh -c \"col -b | vim -M -c 'set nonu ft=man nomod nolist titlestring=MANPAGE' -\"" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # prompt # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # if root, prompt red # if running chroot-boot, prompt cyan # if running chroot, prompt blue # otherwise, prompt yellow # if chroot-labeled system, prompt /etc/chroot_name # otherwise, prompt is `uname -n` if [[ -r /etc/chroot_name ]] && [[ -r /etc/chroot_type ]]; then if [[ "$EUID" == "0" ]]; then PROMPT=$'%{\e[0;31m%}' elif [[ `cat /etc/chroot_type` == "boot" ]]; then PROMPT=$'%{\e[0;36m%}' else PROMPT=$'%{\e[0;34m%}' fi PROMPT=$PROMPT`cat /etc/chroot_name` else if [[ "$EUID" == "0" ]]; then PROMPT=$'%{\e[0;31m%}' else PROMPT=$'%{\e[0;33m%}' fi PROMPT=$PROMPT`uname -n` fi # stop coloring, add space at end and export export PROMPT=$PROMPT$'%{\e[0m%} ' # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # misc # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # quick access to RAMdisk vv="/dev/shm/" # ========================================================================== # aliases # ========================================================================== # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # new commands # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # clear the screen, then ls alias cls="clear;ls" # search entire filesystem, ignore errors alias finds="find / -name 2>/dev/null" # take ownership of file/folder alias mine="sudo chown -R "`whoami`:`whoami` # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # general short commands # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - alias ta="tmux attach" alias s="sudo" alias v="vim" alias sx="schroot -c squeeze startx& logout" alias sd="sudo shutdown -h now" alias sr="sudo reboot" alias ss="sudo pm-suspend" alias :wq="exit" alias :q="exit" alias ..="cd .." alias ...="cd ../.." alias ....="cd ../../.." alias .....="cd ../../../.." alias vv="cd /dev/shm/" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # set default flags # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - alias ls="ls --color=auto -h" alias la="ls -a" alias ll="ls -la" alias lla="ls -la" alias du="du -hs" alias df="df -h" alias octave="octave --silent" alias xpdfr="xpdf -remote 127.0.0.1" alias xpdfv="xpdf -rv" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # git # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - alias gc="git commit -a -v" alias gb="git branch" alias gl="git log --graph --color | less -R" alias gr="git reset --hard HEAD" alias gs="git status" alias gw="git show" alias gco="git checkout" alias gus="git push" alias guss="git push origin master" alias gul="git pull" alias gull="git pull origin master" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # package management # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DISTRO=`awk '/[:alpha:]/ { print $1; exit }' /etc/issue` if [[ $DISTRO == "Debian" || $DISTRO == "Ubuntu" ]]; then alias kb="dpkg -S" alias kc="sudo apt-get --purge autoremove" alias ki="sudo apt-get install" alias kl="dpkg -l" alias kr="sudo apt-get --purge remove" alias ks="apt-cache search" alias ku="sudo apt-get update && sudo apt-get upgrade" alias kw="apt-cache show" elif [[ $DISTRO == "Arch" ]]; then alias kb="pacman -Qo" alias kc='sudo pacman -Sc && for PKG in `pacman -Qqtd`; do sudo pacman -Rs $PKG; done' alias ki="sudo pacman -S" alias kl="pacman -Q" alias kr="sudo pacman -R" alias ks="pacman -Ss" alias ku="sudo pacman -Syu" alias kw="pacman -Si" elif [[ $DISTRO == "Fedora" ]]; then alias kc="sudo yum clean all" alias ki="sudo yum install" alias kl="yum list installed" alias kr="sudo yum remove" alias ks="yum search" alias ku="sudo yum update" alias kw="yum info" fi # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # run-with-command # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - alias -s html=$BROWSER alias -s htm=$BROWSER alias -s org=$BROWSER alias -s php=$BROWSER alias -s com=$BROWSER alias -s edu=$BROWSER alias -s txt=$EDITOR alias -s tex=$EDITOR alias -s pdf=xpdf alias -s gz=tar -xzvf alias -s bz2=tar -xjvf # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # nocorrect # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - alias mkdir="nocorrect mkdir" alias cp="nocorrect cp" alias mv="nocorrect mv" alias ln="nocorrect ln"