You have to source [[roelkluin/cvars|cvars]] to use these tools and run these commands in your git Linux kernel directory. = gg = gg does something like {{{ git grep -n -E [other_options] "$(bli2 "$1")" }}} = bli2 = bli2() parses a string and transforms it into a more complex extended regexp, which it simply echoes. To understand how it parses things try these: {{{ bli2 "@V" bli2 "@d" bli2 " " bli2 " " }}} Note that @V will catch the identifier of a simple local variable, @d will catch a number (even if it's a hex or 1ull), spaces are squeezed and parsed to match optional spaces. || bli2 pattern || description of what is echoed || echoed string (literally) || number of back-references || || any space || optional space || {{{[[:space:]]*}}} || - || || \! || exclamation mark (because bash otherwise bangs) || ! || - || || @S || obligatory space || {{{[[:space:]]+}}} || - || || @V || identifier || {{{[[:alpha:]_]+[[:alnum:]_]*}}} || - || || @K || identifier in only uppercases || {{{[[:upper:]_]+[[:upper:][:digit:]_]*}}} || - || || @Q || a non-alnumeric || {{{[^[:alnum:]_]}}} || - || || @Q2 || a non-alnumeric or extension to the left of a variable|| {{{[^[:alnum:]_>.]}}} || - || || @w || (pointer) member, array || see `bli2 "@w"' || 1 || || @d || any number || bli2 "@d" || 1 || || @n || any number of lines, subsequent matches on the beginning of the next line || ([^\n]*\n)* || 1 || || \(...\) || up to 2 nested parentheses || bli2 "\(...\)" || 2 || || \{...\} || up to 2 nested curly brackets || bli2 "\{...\}" || 2 || || \[...\] || up to 2 nested square brackets || bli2 "\[...\]" || 2 || || \(-..\) || characters optionally followed by up to 2 nested parentheses || bli2 "\(-..\)" || 3 || || \{-..\} || characters optionally followed by up to 2 nested curly brackets || bli2 "\{-..\}" || 3 || || \{.8.\} || up to 8 nested curly brackets || bli2 "\(.8.\)" || 8 || || @...&|@ || prior conditions || bli2 "@...&|@" || 4 || || @&|...@ || later conditions || bli2 "@&|...@" || 4 || || @&|...&|@ || conditions inbetween || bli2 "@&|...&|@" || 4 || || @branch || a branch || bli2 "@branch" || 3 || || @in_branch || in a branch || bli2 "@in_branch" || 4 || = gres = I wrote this to do a multiline (git-)grep, See [[roelkluin/gres_examples|examples]]. gres does something in the order of: {{{ git grep -E -n -other_opts "$(bli2 "$1")" -- '*.c' '*.h' | sed -n -r "$(ecsed2 "${@:2})" }}} with {{{`gres -B1 -A40 "pattern1" "pattern2" "..."'}}} the {{{`}}}-B1' and {{{`}}}-A40' are passed to git-grep, bli2() parses the first pattern to a extended regexp query. Subsequent patterns are passed to ecsed2() which are used to create a sed script. With this script, sed parses the `git grep' output and prints only the output of which the last - but not prior - patterns matched. The sed script transforms the first of the {{{`}}}path/to/filename.c-301-' into a vi command, the remainder are removed. Until an end-of-function- or end-of-match-pattern occurs, lines are extended. Any comments are removed. For each match that `git grep' piped to sed, (parsed) matches are displayed '''if''' no exclusion pattern matched and the last pattern matched.