blob: 34d69cc6a659587a0e17aacfb866b817a355cb1b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
#!/bin/sh
# https://junegunn.github.io/fzf/tips/ripgrep-integration/#6-bind-enter-to-become-action
help() { echo "fgr - grep with fzf (fzf-grep)
USAGE:
fgr [OPTION]... PATTERN
OPTIONS:
-r real time grepping with fzf prompt
-h show this help message
ENVIRONMENT VARIABLES:
FZF_GREP_COMMAND overrides the default grep command whose content is piped into fzf
FZF_GREP_OPENER overrides the default opener used to open selection on pressing 'enter'
"; }
err() { printf '%s: %s\n' "$0" "$@" >&2; exit 1; }
while getopts 'rh' o; do case "$o" in
r) rflag=1 ;;
h) help >&2; exit ;;
?) err "invalid option passed" ;;
esac done
shift $((OPTIND - 1))
[ -z "$FZF_HISTDIR" ] &&
export FZF_HISTDIR="${XDG_STATE_HOME:-$HOME/.local/state}/fzf"
mkdir -pv "$FZF_HISTDIR"
export FZF_HIST="$FZF_HISTDIR/grep_history"
[ -z "$FZF_GREP_COMMAND" ] &&
if command -v rg >/dev/null; then
FZF_GREP_COMMAND="rg --smart-case --column --color=always"
elif command -v git >/dev/null; then
FZF_GREP_COMMAND="git grep -I --ignore-case --column --color=always"
else
FZF_GREP_COMMAND="grep -Rnsi --exclude-dir=.git --color=always"
fi
[ -z "$FZF_GREP_RELOAD" ] &&
FZF_GREP_RELOAD="reload($FZF_GREP_COMMAND {q} || :)"
[ -z "$FZF_GREP_OPENER" ] && FZF_GREP_OPENER='
if [[ $FZF_SELECT_COUNT -eq 0 ]]; then
$EDITOR {1} +{2} # No selection. Open the current line in Vim.
else
$EDITOR +cw -q {+f} # Build quickfix list for the selected items.
fi
'
FZF_OPENER="
# update history
sed -i '\\|^{q}$|d' \"$FZF_HIST\"
echo {q} >> \"$FZF_HIST\"
$FZF_GREP_OPENER
"
query="$*"
fzf() { $FZF_GREP_COMMAND "$query" | command fzf "$@" \
--ansi --multi --exit-0 --header-first \
--history="$FZF_HIST" \
--bind "enter:execute($FZF_OPENER)" \
--bind "ctrl-o:become($FZF_OPENER)" \
--bind 'ctrl-v:toggle-preview,ctrl-space:toggle-preview' \
--bind "ctrl-r:reload($FZF_GREP_COMMAND '$query')" \
--bind 'alt-a:select-all,alt-d:deselect-all,ctrl-/:toggle-preview' \
--delimiter : \
--preview 'bat --style=full --color=always --highlight-line {2} {1}' \
--preview-window '~4,+{2}+4/3,<80(up)'; }
if [ "$rflag" = 1 ]; then
fzf --disabled --query "$query" \
--header "COMMAND: $FZF_GREP_COMMAND <prompt-query>" \
--bind "change:$FZF_GREP_RELOAD"
else
fzf --header "COMMAND: $FZF_GREP_COMMAND '$query'"
fi
|