All Projects → hlissner → Zsh Autopair

hlissner / Zsh Autopair

Licence: mit
Auto-close and delete matching delimiters in zsh

Programming Languages

shell
77523 projects

Labels

Projects that are alternatives of or similar to Zsh Autopair

Zsh Vi Mode
💻 A better and friendly vi(vim) mode plugin for ZSH.
Stars: ✭ 181 (-16.59%)
Mutual labels:  zsh
Nord Xresources
An arctic, north-bluish clean and elegant Xresources color theme.
Stars: ✭ 210 (-3.23%)
Mutual labels:  zsh
Ansible Role Zsh
Setup antigen with oh-my-zsh, powerlevel10k theme, fzf, autosuggestions, syntax-highlighting
Stars: ✭ 210 (-3.23%)
Mutual labels:  zsh
Shellder
🐚 Featured zsh/fish shell theme
Stars: ✭ 192 (-11.52%)
Mutual labels:  zsh
Nord Terminal App
An arctic, north-bluish clean and elegant Terminal.app color theme.
Stars: ✭ 198 (-8.76%)
Mutual labels:  zsh
Black Void Zsh
🔮 Awesome, Customable Zsh Starter Kit 🌠🌠
Stars: ✭ 206 (-5.07%)
Mutual labels:  zsh
Dotfiles
My dotfiles: Experimental, ongoing configuration files, development environment and scripts for various Unix-like systems, text-based command-line applications and interfaces.
Stars: ✭ 185 (-14.75%)
Mutual labels:  zsh
Common
A simple, clean and minimal prompt.
Stars: ✭ 213 (-1.84%)
Mutual labels:  zsh
Dotfiles
My lovely dotfiles. Chocolate and unicorns.
Stars: ✭ 199 (-8.29%)
Mutual labels:  zsh
Dotfiles
🌷
Stars: ✭ 209 (-3.69%)
Mutual labels:  zsh
Twf
Standalone tree view file explorer, inspired by fzf.
Stars: ✭ 196 (-9.68%)
Mutual labels:  zsh
Zoxide
A smarter cd command. Supports all major shells.
Stars: ✭ 4,422 (+1937.79%)
Mutual labels:  zsh
Dot Files
⚡️ Well documented, terminal centric web developer's dot files. Neovim, Zsh, Tmux, Git, etc.
Stars: ✭ 209 (-3.69%)
Mutual labels:  zsh
Bashhub Server
Private cloud shell history. Open source server for bashhub https://github.com/rcaloras/bashhub-client
Stars: ✭ 189 (-12.9%)
Mutual labels:  zsh
Desk
A lightweight workspace manager for the shell
Stars: ✭ 2,417 (+1013.82%)
Mutual labels:  zsh
Powerlevel9k
Powerlevel9k was a tool for building a beautiful and highly functional CLI, customized for you. P9k had a substantial impact on CLI UX, and its legacy is now continued by P10k.
Stars: ✭ 13,268 (+6014.29%)
Mutual labels:  zsh
Dotfiles
Ninrod's sharpened dotfiles for emacs, vim, zsh, tmux. Since '15.
Stars: ✭ 208 (-4.15%)
Mutual labels:  zsh
Zshdb
gdb-like "trepan" debugger for zsh
Stars: ✭ 213 (-1.84%)
Mutual labels:  zsh
Dotfiles
My lovely dots ~/.💖
Stars: ✭ 212 (-2.3%)
Mutual labels:  zsh
Dotfiles
My vim, zsh, tmux, and macOS dotfiles
Stars: ✭ 209 (-3.69%)
Mutual labels:  zsh

MIT License ZSH 5.0.2+ Build Status

zsh-autopair

A simple plugin that auto-closes, deletes and skips over matching delimiters in zsh intelligently. Hopefully.

NOTE: zsh-autopair is untested for versions of Zsh below 5.0.2. Please report any issues you have in earlier versions!

Specifically, zsh-autopair does 5 things for you:

  1. It inserts matching pairs (by default, that means brackets, quotes and spaces):

    e.g. echo | => " => echo "|"

  2. It skips over matched pairs:

    e.g. cat ./*.{py,rb|} => } => cat ./*.{py,rb}|

  3. It auto-deletes pairs on backspace:

    e.g. git commit -m "|" => backspace => git commit -m |

  4. And does all of the above only when it makes sense to do so. e.g. when the pair is balanced and when the cursor isn't next to a boundary character:

    e.g. echo "|"" => backspace => echo |"" (doesn't aggressively eat up too many quotes)

  5. Spaces between brackets are expanded and contracted.

    e.g. echo [|] => space => echo [ | ] => backspace => echo [|]

Table of Contents

Install

Download and source autopair.zsh

if [[ ! -d ~/.zsh-autopair ]]; then
  git clone https://github.com/hlissner/zsh-autopair ~/.zsh-autopair
fi

source ~/.zsh-autopair/autopair.zsh
autopair-init

Antigen

antigen bundle hlissner/zsh-autopair

zgen

if ! zgen saved; then
    echo "Creating a zgen save"

    # ... other plugins
    zgen load hlissner/zsh-autopair

    zgen save
fi

zplug

Load autopair after compinit, otherwise, the plugin won't work.

zplug "hlissner/zsh-autopair", defer:2

Configuration

zsh-autopair sets itself up. You can prevent this by setting AUTOPAIR_INHIBIT_INIT.

Options:

  • AUTOPAIR_BETWEEN_WHITESPACE (default: blank): if set, regardless of whether delimiters are unbalanced or do not meet a boundary check, pairs will be auto-closed if surrounded by whitespace, BOL or EOL.

  • AUTOPAIR_INHIBIT_INIT (default: blank): if set, autopair will not automatically set up keybinds. Check out the initialization code if you want to know what it does.

  • AUTOPAIR_PAIRS (default: ('`' '`' "'" "'" '"' '"' '{' '}' '[' ']' '(' ')' ' ' ' ')): An associative array that map pairs. Only one-character pairs are supported. To modify this, see the "Adding/Removing pairs" section.

  • AUTOPAIR_LBOUNDS/AUTOPAIR_RBOUNDS (default: see below): Associative lists of regex character groups dictating the 'boundaries' for autopairing depending on the delimiter. These are their default values:

    AUTOPAIR_LBOUNDS=(all '[.:/\!]')
    AUTOPAIR_LBOUNDS+=(quotes '[]})a-zA-Z0-9]')
    AUTOPAIR_LBOUNDS+=(spaces '[^{([]')
    AUTOPAIR_LBOUNDS+=(braces '')
    AUTOPAIR_LBOUNDS+=('`' '`')
    AUTOPAIR_LBOUNDS+=('"' '"')
    AUTOPAIR_LBOUNDS+=("'" "'")
    
    AUTOPAIR_RBOUNDS=(all '[[{(<,.:?/%$!a-zA-Z0-9]')
    AUTOPAIR_RBOUNDS+=(quotes '[a-zA-Z0-9]')
    AUTOPAIR_RBOUNDS+=(spaces '[^]})]')
    AUTOPAIR_RBOUNDS+=(braces '')
    

    For example, if $AUTOPAIR_LBOUNDS[braces]="[a-zA-Z]", then braces ({([) won't be autopaired if the cursor follows an alphabetical character.

    Individual delimiters can be used too. Setting $AUTOPAIR_RBOUNDS['{']="[0-9]" will cause { specifically to not be autopaired when the cursor precedes a number.

Adding/Removing pairs

You can change the designated pairs in zsh-autopair by modifying the AUTOPAIR_PAIRS envvar. This can be done before initialization like so:

typeset -gA AUTOPAIR_PAIRS
AUTOPAIR_PAIRS+=("<" ">")

Or after initialization; however, you'll have to bind keys to autopair-insert manually:

AUTOPAIR_PAIRS+=("<" ">")
bindkey "<" autopair-insert
# prevents breakage in isearch
bindkey -M isearch "<" self-insert

To remove pairs, use unset 'AUTOPAIR_PAIRS[<]'. Unbinding is optional.

Troubleshooting & compatibility issues

zgen & prezto compatibility

Prezto's Editor module is known to reset autopair's bindings. A workaround is to defer autopair from initializing (by setting AUTOPAIR_INHIBIT_INIT=1) and initialize it manually (by calling autopair-init):

source "$HOME/.zgen/zgen.zsh"

# Add this
AUTOPAIR_INHIBIT_INIT=1

if ! zgen saved; then
    zgen prezto
    # ...
    zgen load hlissner/zsh-autopair 'autopair.zsh'
    #...
    zgen save
fi

# And this
autopair-init

text on right-side of cursor interfere with completion

Bind Tab to expand-or-complete-prefix and completion will ignore what's to the right of cursor:

bindkey '^I' expand-or-complete-prefix

This has the unfortunate side-effect of overwriting whatever's right of the cursor, however.

zsh-autopair & isearch?

zsh-autopair silently disables itself in isearch, as the two are incompatible.

Midnight Commander

MC hangs when zsh-autopair tries to bind the space key. This also breaks the MC subshell.

Disable space expansion to work around this: unset 'AUTOPAIR_PAIRS[ ]'

Other resources

  • Works wonderfully with [zsh-syntax-highlight] and ZSH_HIGHLIGHT_HIGHLIGHTERS+=brackets, but zsh-syntax-highlight must be loaded after zsh-autopair.
  • Mixes well with these vi-mode zsh modules: surround, select-quoted, and select-bracketed (they're built into zsh as of zsh-5.0.8)
  • Other relevant repositories of mine:
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].