Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
rc/.zshrc
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
251 lines (199 sloc)
7.14 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| autoload colors; colors | |
| ### Tab completion | |
| # Force a reload of completion system if nothing matched; this fixes installing | |
| # a program and then trying to tab-complete its name | |
| _force_rehash() { | |
| (( CURRENT == 1 )) && rehash | |
| return 1 # Because we didn't really complete anything | |
| } | |
| # Always use menu completion, and make the colors pretty! | |
| zstyle ':completion:*' menu select yes | |
| zstyle ':completion:*:default' list-colors '' | |
| # Completers to use: rehash, general completion, then various magic stuff and | |
| # spell-checking. Only allow two errors when correcting | |
| zstyle ':completion:*' completer _force_rehash _complete _ignored _match _correct _approximate _prefix | |
| zstyle ':completion:*' max-errors 2 | |
| # When looking for matches, first try exact matches, then case-insensiive, then | |
| # partial word completion | |
| zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' 'r:|[._-]=** r:|=**' | |
| # Turn on caching, which helps with e.g. apt | |
| zstyle ':completion:*' use-cache on | |
| zstyle ':completion:*' cache-path ~/.zsh/cache | |
| # Show titles for completion types and group by type | |
| zstyle ':completion:*:descriptions' format "$fg_bold[black]» %d$reset_color" | |
| zstyle ':completion:*' group-name '' | |
| # Ignore some common useless files | |
| zstyle ':completion:*' ignored-patterns '*?.pyc' '__pycache__' | |
| zstyle ':completion:*:*:rm:*:*' ignored-patterns | |
| zstyle :compinstall filename '/home/eevee/.zshrc' | |
| # Always do mid-word tab completion | |
| setopt complete_in_word | |
| autoload -Uz compinit | |
| compinit | |
| ### History | |
| setopt extended_history hist_no_store hist_ignore_dups hist_expire_dups_first hist_find_no_dups inc_append_history share_history hist_reduce_blanks hist_ignore_space | |
| export HISTFILE=~/.zsh_history | |
| export HISTSIZE=1000000 | |
| export SAVEHIST=1000000 | |
| ### Some.. options | |
| setopt autocd beep extendedglob nomatch rc_quotes | |
| unsetopt notify | |
| # Don't count common path separators as word characters | |
| WORDCHARS=${WORDCHARS//[&.;\/]} | |
| # Words cannot express how fucking sweet this is | |
| REPORTTIME=5 | |
| ### Prompt | |
| PROMPT="%{%(!.$fg_bold[red].$fg_bold[green])%}%n@%m%{$reset_color%} %{$fg_bold[blue]%}%~%{$reset_color%} %(!.☭.⚘) " | |
| RPROMPT_code="%(?..\$? %{$fg_no_bold[red]%}%?%{$reset_color%} )" | |
| RPROMPT_jobs="%1(j.%%# %{$fg_no_bold[cyan]%}%j%{$reset_color%} .)" | |
| RPROMPT_time="%{$fg_bold[black]%}%*%{$reset_color%}" | |
| RPROMPT=$RPROMPT_code$RPROMPT_jobs$RPROMPT_time | |
| ### Misc environment and alias stuff | |
| if whence ack-grep &> /dev/null; then | |
| alias ack=ack-grep | |
| fi | |
| alias apt='sudo aptitude' | |
| # Don't glob with find or wget | |
| for command in find wget; \ | |
| alias $command="noglob $command" | |
| # rvm | |
| [[ -s $HOME/.rvm/scripts/rvm ]] && source $HOME/.rvm/scripts/rvm | |
| # reconnect ssh socket in an existing tmux session | |
| function fixssh { | |
| # split on newlines. double-quotes prevent splitting the command sub? | |
| # unsure why that's necessary here but not anywhere else though. | |
| for line in "${(f)$(tmux show-environment)}"; do | |
| if [[ $line =~ '^SSH_\w+=' ]]; then | |
| echo export $line | |
| export $line | |
| fi | |
| done | |
| } | |
| ### ls | |
| LSOPTS='-lAvF --si' # long mode, show all, natural sort, type squiggles, friendly sizes | |
| LLOPTS='' | |
| case $(uname -s) in | |
| FreeBSD) | |
| LSOPTS="${LSOPTS} -G" | |
| ;; | |
| Linux) | |
| eval "$(dircolors -b)" | |
| LSOPTS="$LSOPTS --color=auto" | |
| LLOPTS="$LLOPTS --color=always" # so | less is colored | |
| # Just loaded new ls colors via dircolors, so change completion colors | |
| # to match | |
| zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS} | |
| ;; | |
| esac | |
| alias ls="ls $LSOPTS" | |
| alias ll="ls $LLOPTS | less -FX" | |
| ### screen (and tmux's screen-compatible title support) | |
| function title { | |
| # param: title to use | |
| local prefix='' | |
| # If I'm in a screen, all the windows are probably on the same machine, so | |
| # I don't really need to title every single one with the machine name. | |
| # On the other hand, if I'm not logged in as me (but, e.g., root), I'd | |
| # certainly like to know that! | |
| if [[ $USER != 'eevee' && $USER != 'amunroe' ]]; then | |
| prefix="[$USER] " | |
| fi | |
| # Set screen window title | |
| if [[ $TERM == "screen"* ]]; then | |
| print -n "\ek$prefix$1\e\\" | |
| fi | |
| # Prefix the xterm title with the current machine name, but only if I'm not | |
| # on a local machine. This is tricky, because screen won't reliably know | |
| # whether I'm using SSH right now! So just assume I'm local iff I'm not | |
| # running over SSH *and* not using screen. Local screens are fairly rare. | |
| prefix=$HOST | |
| if [[ $SSH_CONNECTION == '' && $TERM != "screen"* ]]; then | |
| prefix='' | |
| fi | |
| # If we're showing host and I'm not under my usual username, prepend it | |
| if [[ $prefix != '' && $USER != 'eevee' && $USER != 'amunroe' ]]; then | |
| prefix="$USER@$prefix" | |
| fi | |
| # Wrap it in brackets | |
| if [[ $prefix != '' ]]; then | |
| prefix="[$prefix] " | |
| fi | |
| # Set xterm window title | |
| if [[ $TERM == "xterm"* || $TERM == "screen"* ]]; then | |
| print -n "\e]2;$prefix$1\a" | |
| fi | |
| } | |
| function precmd { | |
| # Shorten homedir back to '~' | |
| local shortpwd=${PWD/$HOME/\~} | |
| title "zsh $shortpwd" | |
| } | |
| function preexec { | |
| title $* | |
| } | |
| ### Keybindings | |
| bindkey -e | |
| # General movement | |
| # Taken from http://wiki.archlinux.org/index.php/Zsh and Ubuntu's inputrc | |
| bindkey "\e[1~" beginning-of-line | |
| bindkey "\e[4~" end-of-line | |
| bindkey "\e[5~" beginning-of-history | |
| bindkey "\e[6~" end-of-history | |
| bindkey "\e[3~" delete-char | |
| bindkey "\e[2~" quoted-insert | |
| bindkey "\e[1;5C" forward-word | |
| bindkey "\e[1;5D" backward-word | |
| bindkey "\e[5C" forward-word | |
| bindkey "\eOc" emacs-forward-word | |
| bindkey "\e[5D" backward-word | |
| bindkey "\eOd" emacs-backward-word | |
| bindkey "\e\e[C" forward-word | |
| bindkey "\e\e[D" backward-word | |
| # for rxvt | |
| bindkey "\e[8~" end-of-line | |
| bindkey "\e[7~" beginning-of-line | |
| # for non RH/Debian xterm, can't hurt for RH/Debian xterm | |
| bindkey "\eOH" beginning-of-line | |
| bindkey "\eOF" end-of-line | |
| # for freebsd console | |
| bindkey "\e[H" beginning-of-line | |
| bindkey "\e[F" end-of-line | |
| # Tab completion | |
| bindkey '^i' complete-word # tab to do menu | |
| bindkey "\e[Z" reverse-menu-complete # shift-tab to reverse menu | |
| # Up/down arrow. | |
| # I want shared history for ^R, but I don't want another shell's activity to | |
| # mess with up/down. This does that. | |
| down-line-or-local-history() { | |
| zle set-local-history 1 | |
| zle down-line-or-history | |
| zle set-local-history 0 | |
| } | |
| zle -N down-line-or-local-history | |
| up-line-or-local-history() { | |
| zle set-local-history 1 | |
| zle up-line-or-history | |
| zle set-local-history 0 | |
| } | |
| zle -N up-line-or-local-history | |
| bindkey "\e[A" up-line-or-local-history | |
| bindkey "\eOA" up-line-or-local-history | |
| bindkey "\e[B" down-line-or-local-history | |
| bindkey "\eOB" down-line-or-local-history | |
| page-up-within-tmux() { | |
| if [[ $TMUX == '' ]]; then | |
| # no-op; default behavior isn't useful, and anyway you don't want to do | |
| # something TOO cool here since you won't be able to do it inside tmux. | |
| # TODO if there's any way to command the /emu/ to scroll up one page, i | |
| # would love to hear about it | |
| else | |
| tmux copy-mode -u | |
| fi | |
| } | |
| zle -N page-up-within-tmux | |
| # page up | |
| bindkey "${terminfo[kpp]}" page-up-within-tmux | |
| ### Machine-specific extras | |
| if [[ -r $HOME/.zlocal ]]; then | |
| source $HOME/.zlocal | |
| fi |