zsh/zshrc
Kenneth Benzie (Benie) 9e77e83d7f Only add aliases when the target command exists
Previously aliases for commands were added without checking if the
command being aliased existed first, this is now not the case.
2018-04-21 17:18:43 +01:00

161 lines
4.2 KiB
Bash

# .zshrc [2] Used for setting user's interactive shell configuration and
# executing commands, will be sourced when starting as an interactive shell.
# Load plugin scripts
plugin-load() { source ~/.config/zsh/$1/$1.plugin.zsh }
plugin-load zsh-autosuggestions
plugin-load zsh-history-substring-search
plugin-load zsh-syntax-highlighting
# Disable non end-of-line autosuggest accept widgets
ZSH_AUTOSUGGEST_ACCEPT_WIDGETS=(end-of-line vi-end-of-line)
# Remove duplicates from history
setopt hist_ignore_all_dups
setopt hist_reduce_blanks
setopt hist_save_no_dups
# Enable multi-terminal history
setopt inc_append_history
# Enable comments in the prompt
setopt interactive_comments
# Disable '<Ctrl>D' to logout
setopt ignore_eof
# Disable sound
unsetopt beep
# Disable tty flow control, allows vim to use '<Ctrl>S'
unsetopt flow_control && stty -ixon
# Initialize completions
autoload -U compinit
compinit
# Enable prompt themes
autoload -Uz promptinit
promptinit
prompt fresh
# Enable vi mode line editor keymap
bindkey -v
# Enable yank, change, and delete whole line with 'Y', 'cc', and 'dd'
bindkey -M vicmd 'Y' vi-yank-whole-line
# Enable undo with 'u' and redo with 'U'
bindkey -M vicmd 'u' undo
bindkey -M vicmd 'U' redo
# Enable toggle comment at start of line al la vim-commentary
bindkey -M vicmd 'gcc' vi-pound-insert
# TODO: vi-pipe???
# Enable accepting autosuggestions
bindkey '^O' forward-word
bindkey '^P' autosuggest-accept
# Enable substring history search with 'j' and 'k'
bindkey -M vicmd 'k' history-substring-search-up
bindkey -M vicmd 'j' history-substring-search-down
# Replace '<Esc>h' with 'K' to view help
bindkey -r '^[h'
bindkey -M vicmd 'K' run-help
# Disable Ex mode with ':'
bindkey -rM vicmd ':'
# Enable '<Shirt><Tab>' reverse order completions
bindkey '^[[Z' reverse-menu-complete
# Use editor to edit command line with '<Ctrl>V'
autoload -U edit-command-line
zle -N edit-command-line
bindkey -M vicmd '^V' edit-command-line
# Get the shells parent process name.
ppid_name() { echo $(ps -p $(ps -p $(echo $$) -o ppid=) -o comm=) }
# Enable changing cursor shape based on vi mode
if [ "$ITERM_PROFILE" != "" ] && [ "$TMUX" = "" ]; then
# iTerm2 cursor shape escape sequences outside tmux
cursor_block="\e]50;CursorShape=0\C-G"
cursor_line="\e]50;CursorShape=1\C-G"
elif [ "$(ppid_name)" != "python2" ]; then
# iTerm2 inside tmux or VTE compatible cursor shape escape sequences,
# exclude Guake even though it's VTE based it doesn't like these
cursor_block="\e[2 q"
cursor_line="\e[6 q"
fi
if [[ ! -z "$cursor_block" && ! -z "$cursor_line" ]]; then
# Change cursor shape when vi mode changes
function zle-keymap-select zle-line-init {
case $KEYMAP in
vicmd) print -n -- "$cursor_block" ;;
viins|main) print -n -- "$cursor_line" ;;
esac
zle reset-prompt
zle -R
}
# Change cursor shape when line editing is finished
function zle-line-finish { print -n -- "$cursor_block" }
# Register cursor shape hooks
zle -N zle-keymap-select
zle -N zle-line-init
zle -N zle-line-finish
fi
# Remove duplicates from environment variables
typeset -U PATH
typeset -U MANPATH
typeset -U INFOPATH
# Add ccache symlink directory to start of PATH, this must be after
# `typeset -U PATH` because on macOS this reorders the list so ccache's
# symlinks will no longer be at the start of PATH rendering it unusable.
if [ `uname` = Darwin ]; then
[ -f /usr/local/bin/ccache ] && \
PATH=/usr/local/opt/ccache/libexec:$PATH
else
[ -f /usr/bin/ccache ] && \
PATH=/usr/lib/ccache:$PATH
fi
# Aliases
alias grep='grep --color=always'
which cmake &> /dev/null && \
alias cninja='cmake -GNinja -DCMAKE_EXPORT_COMPILE_COMMNADS=ON'
which ssh &> /dev/null && \
alias ssh='TERM=xterm-256color ssh'
case `uname` in
Linux)
[ "$TMUX" = "" ] && \
alias cls="printf '\ec'" || \
alias cls="clear && printf '\e[3J'"
alias ls='ls -F --color=auto'
which cgdb &> /dev/null && \
alias debug='cgdb --args' || \
which gdb &> /dev/null && \
alias debug='gdb --args'
;;
Darwin)
alias cls="clear && printf '\e[3J'"
alias ls='ls -GFh'
which lldb &> /dev/null && \
alias debug='lldb --'
;;
esac
if [ "$TMUX" != "" ]; then
alias sp='tmux split-window'
alias vs='tmux split-window -h'
fi