#!/usr/bin/env bash confirm() { while [ 1 ]; do read -p "$1" -n 1 -r echo if [[ "$REPLY" =~ ^[Yy] ]]; then return 0 elif [[ "$REPLY" =~ ^[Nn] ]]; then return 1 fi done } remove() { echo "Remove $1" rm -f "$1" } remove_line() { src=$(readlink "$1") if [ $? -eq 0 ]; then echo "Remove from $1 ($src):" else src=$1 echo "Remove from $1:" fi shift line_no=1 match=0 while [ -n "$1" ]; do line=$(sed -n "$line_no,\$p" "$src" | \grep -m1 -nF "$1") if [ $? -ne 0 ]; then shift line_no=1 continue fi line_no=$(( $(sed 's/:.*//' <<< "$line") + line_no - 1 )) content=$(sed 's/^[0-9]*://' <<< "$line") match=1 echo " - Line #$line_no: $content" [ "$content" = "$1" ] || confirm " - Remove (y/n) ? " if [ $? -eq 0 ]; then awk -v n=$line_no 'NR == n {next} {print}' "$src" > "$src.bak" && mv "$src.bak" "$src" || break echo " - Removed" else echo " - Skipped" line_no=$(( line_no + 1 )) fi done [ $match -eq 0 ] && echo " - Nothing found" echo } for shell in bash zsh; do remove ~/.fzf.${shell} remove_line ~/.${shell}rc \ "[ -f ~/.fzf.${shell} ] && source ~/.fzf.${shell}" \ "source ~/.fzf.${shell}" done bind_file=~/.config/fish/functions/fish_user_key_bindings.fish if [ -f "$bind_file" ]; then remove_line "$bind_file" "fzf_key_bindings" fi if [ -d ~/.config/fish/functions ]; then remove ~/.config/fish/functions/fzf.fish if [ "$(ls -A ~/.config/fish/functions)" ]; then echo "Can't delete non-empty directory: \"~/.config/fish/functions\"" else rmdir ~/.config/fish/functions fi fi