#!/bin/sh # Install vim plugins listed in $PLIST. # Uninstall vim plugins not listed in $PLIST. # Format of $PLIST: {start,opt} trap clean EXIT clean() { rm -f "$TMP1" "$TMP2" } add() { printf 'Installing %s in %s... ' "${2##*/}" "$1" git -C "${PPATH}/${1}" clone -q "$2" && printf 'done\n' } del() { printf 'Deleting %s from %s... ' "${2##*/}" "$1" rm -rf "${PPATH:?}/${1}/${2##*/}" && printf 'done\n' } command -v "git" > /dev/null || { printf '%s: git: not found\n' "${0##*/}"; exit 1; } TMP1=$(mktemp -t "${0##*/}".1.XXXXXXXXXX) || exit 1 TMP2=$(mktemp -t "${0##*/}".2.XXXXXXXXXX) || exit 1 PPATH="${HOME}/.vim/pack/plugins" PLIST="${HOME}/.vim/pack/plugins/list" mkdir -p "${PPATH}"/start \ "${PPATH}"/opt awk 'BEGIN { OFS = "\t" } !/^[[:blank:]]*(start|opt)/ { next } NF { print $1, $2 }' "$PLIST" | sort > "$TMP1" find "$PPATH"/* -mindepth 1 -maxdepth 1 -type d | while IFS= read -r line; do printf '%s\t%s\n' \ "$(dirname "${line#*plugins/}")" \ "$(git -C "$line" remote get-url origin)" done | sort > "$TMP2" comm -13 "$TMP1" "$TMP2" | while read -r line; do del $line done comm -23 "$TMP1" "$TMP2" | while read -r line; do add $line done "$EDITOR" -c "helptags ALL" -c q