# .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 'D' to logout setopt ignore_eof # Disable sound unsetopt beep # Disable tty flow control, allows vim to use 'S' unsetopt flow_control # 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 'h' with 'K' to view help bindkey -r '^[h' bindkey -M vicmd 'K' run-help # Disable Ex mode with ':' bindkey -rM vicmd ':' # Use editor to edit command line with 'V' autoload -U edit-command-line zle -N edit-command-line bindkey -M vicmd '^V' edit-command-line # Enable changing cursor shape based on vi mode if [ "$TMUX" != "" ]; then tmux_before="\EPtmux;\E" tmux_after="\E\\" fi if [ "$ITERM_SESSION_ID" != "" ]; then # iterm2 cursor shape escape sequences cursor_block="$tmux_before\E]50;CursorShape=0\C-G$tmux_after" cursor_line="$tmux_before\E]50;CursorShape=1\C-G$tmux_after" else # VTE compatible cursor shape escape sequences cursor_block="$tmux_before\E[2 q$tmux_after" cursor_line="$tmux_before\E[6 q$tmux_after" fi unset tmux_before tmux_after 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 # Aliases alias grep='grep --color=always' alias cninja='cmake -GNinja -DCMAKE_EXPORT_COMPILE_COMMNADS=ON' 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' alias debug='cgdb --args' ;; Darwin) alias cls="clear && printf '\e[3J'" alias ls='ls -GFh' alias debug='lldb --' ;; esac if [ "$TMUX" != "" ]; then alias sp='tmux split-window' alias vs='tmux split-window -h' fi