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