#+TITLE: ZSH #+STARTUP: showall Autoload any ZSH function from =$HOME/.zsh/functions=. #+BEGIN_SRC sh fpath=($HOME/.zsh/functions $fpath) autoload -U $HOME/.zsh/functions/*(:t) #+END_SRC * Aliases Use rlwrap on some less-than-pleasant REPLs that don't have GNU Readline-like features themselves. #+BEGIN_SRC sh alias csi="rlwrap csi" alias scsh="rlwrap scsh" alias sbcl="rlwrap sbcl" #+END_SRC This alias is useful for when I'm trying something new with herbstluftwm. #+BEGIN_SRC sh alias hc=herbstclient #+END_SRC * History Store ZSH history in a non-intrusive place. #+BEGIN_SRC sh HISTFILE=$HOME/.zsh/histfile #+END_SRC Keep at most 1000 previous commands in memory. #+BEGIN_SRC sh HISTSIZE=1000 #+END_SRC Save at most 1000 previous commands to disk. #+BEGIN_SRC sh SAVEHIST=1000 #+END_SRC Allow multiple shell instances to share the same history. #+BEGIN_SRC sh setopt SHARE_HISTORY #+END_SRC Don't remember duplicated commands. #+BEGIN_SRC sh setopt HIST_IGNORE_ALL_DUPS #+END_SRC * Plug-ins Load zplug, a next generation zsh plugin manager. #+BEGIN_SRC sh source /usr/share/zsh/scripts/zplug/init.zsh #+END_SRC Add zsh-syntax-highlighting. #+BEGIN_SRC sh zplug "zsh-users/zsh-syntax-highlighting", defer:3 #+END_SRC Add zsh-autosuggestions. #+BEGIN_SRC sh zplug "zsh-users/zsh-autosuggestions" #+END_SRC Add bgnotify from oh-my-zsh to show when long-running commands finish. #+BEGIN_SRC sh zplug "plugins/bgnotify", from:oh-my-zsh #+END_SRC Make sure all plugins are installed. #+BEGIN_SRC sh if ! zplug check --verbose; then printf "Install? [y/N]: " if read -q; then echo; zplug install fi fi #+END_SRC Load all plugins. #+BEGIN_SRC sh zplug load --verbose #+END_SRC * X Interaction Make some widgets for interacting with the clipboard. #+BEGIN_SRC sh zle -N x-copy-region-as-kill zle -N x-kill-region zle -N x-yank #+END_SRC Bind them to keyboard shortcuts. #+BEGIN_SRC sh bindkey -e '^[w' x-copy-region-as-kill bindkey -e '^W' x-kill-region bindkey -e '^Y' x-yank #+END_SRC * Completion Initialize completion. This triggers loading of zsh-syntax-highlighting as well. #+BEGIN_SRC sh autoload -Uz compinit compinit #+END_SRC * Less I use a terminal that's always 80 columns wide. This means that a lot of output doesn't fit on a single line. I use the less command a lot to look at output that's too big and wide to view in my terminal. The default doesn't make this any better though, so I use these switches. Most of these I originally got from what git uses. #+BEGIN_SRC sh export LESS="FXRSi" #+END_SRC This causes less to immediately quit if there is no need to use a pager (everything fits in a single screen) (=-F=). Doesn't clear the screen when less is closed (=-X=). Handles ANSI colors (=-R=). Stops long lines from wraping (=-S=). And makes searches case-insensitive (=-i=).