v 1.3 KB

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