v 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #!/usr/bin/env bash
  2. [ "$vim" ] || vim=vim
  3. [ $viminfo ] || viminfo=~/.viminfo
  4. usage="$(basename $0) [-a] [-l] [-[0-9]] [--debug] [--help] [regexes]"
  5. [ $1 ] || list=1
  6. fnd=()
  7. for x; do case $x in
  8. -a) deleted=1;;
  9. -l) list=1;;
  10. -[0-9]) edit=${x:1}; shift;;
  11. --help) echo $usage; exit;;
  12. --debug) vim=echo;;
  13. --) shift; fnd+=("$@"); break;;
  14. *) fnd+=("$x");;
  15. esac; shift; done
  16. set -- "${fnd[@]}"
  17. [ -f "$1" ] && {
  18. $vim "$1"
  19. exit
  20. }
  21. while IFS=" " read line; do
  22. [ "${line:0:1}" = ">" ] || continue
  23. fl=${line:2}
  24. [ -f "${fl/\~/$HOME/}" -o "$deleted" ] || continue
  25. match=1
  26. for x; do
  27. [[ "$fl" =~ $x ]] || match=
  28. done
  29. [ "$match" ] || continue
  30. i=$((i+1))
  31. files[$i]="$fl"
  32. done < "$viminfo"
  33. if [ "$edit" ]; then
  34. resp=${files[$((edit+1))]}
  35. elif [ "$i" = 1 -o "$list" = "" ]; then
  36. resp=${files[1]}
  37. elif [ "$i" ]; then
  38. while [ $i -gt 0 ]; do
  39. echo -e "$((i-1))\t${files[$i]}"
  40. i=$((i-1))
  41. done
  42. read -p '> ' CHOICE
  43. [ "$CHOICE" ] && resp=${files[$((CHOICE+1))]}
  44. fi
  45. [ "$resp" ] || exit
  46. $vim "${resp/\~/$HOME}"