Minimal example:

```bash
man git | cat

```

Real example:

```bash
man git | grep --color=always -C 3 "pathspec"

```

FWIW, I've tried `--pager="cat"` using various pagers, as well as piping to various pagers. I've also tried using `vimcat` with the same, but unfortunately [it freezes](https://github.com/rkitover/vimpager/issues/222). I've even tried using `unbuffered`. All to no avail.

Perhaps it's possible using `-T` or `{g,n,t}roff`, but I'm not sure how? Is there a way I can pipe to `less`/`vim`/etc and have it pass through to stdout **with formatting (colors/etc)** and **without paginating**?

---

---

---

**Edit:** Thanks to Stéphane's help below, I now have a beautiful way of easily searching through (and highlighting!) all matched man pages. This is a game changer for me. Thank you, Stéphane!

[![enter image description here](https://i.stack.imgur.com/NuvsI.png)](https://i.stack.imgur.com/NuvsI.png)

For those who might be interested, here is the key part of the script (no doubt it can be improved; feedback is always welcome):

**Edit:** I've now incorporated Stéphane's additional feedback. Huge improvement!

**Edit:** I've further improved this solution to work with both Ubuntu 20.04.4 LTS and macOS 12.6, [by instead piping to `ul`](https://unix.stackexchange.com/questions/717072/why-might-man-awk-be-including-results-that-dont-match-the-search-term/717080#717080).

```bash
#!/bin/bash
arg_search="$1"

typeset -A seen=()
while IFS= read -ru3 filename; do
    if (( ! seen[\$filename]++ )); then
        # 'man -awK' sometimes returns bogus results due to searching through
        # everything, including comments in the man source file, so filter
        # these out. Note that this creates a secondary problem: legitimate
        # results may get filtered out when the search term is two or more
        # words spanning across lines. This can be solved with a multiline
        # regex using `pcre2grep -M 'search\s+term`, but this is perhaps
        # growing beyond the scope of things here.
        { man --no-hyphenation --no-justification --regex -- "$filename" | \
            grep -iqE -- "$arg_search"; } || continue

        # Print filename. Fill terminal width with highlighted background color.
        filename_bar="$(printf '%s\t' "$filename" | expand -t $(tput cols))"
        printf '\e[1;103;30m%s\e[0m\n' "$filename_bar"
        # Per Stéphane's feedback, here's a cleaner version of the same for zsh:
        # psvar=${(mr[COLUMNS])filename} print -P '%K{yellow}%F{black}%1v%k%f'

        MAN_KEEP_FORMATTING=1 man \
            --no-hyphenation --no-justification --regex -- "$filename" | \
            ul | \
            grep -iE --color=always -- "$arg_search"
    fi
    # 'unbuffer' seems to be required for macOS in order to unbuffer the output,
    # as 'stdbuf -oL -eL' doesn't seem to work. Install on macOS using
    # 'brew install expect' [sic], which contains unbuffer. This otherwise
    # doesn't hurt anything on Ubuntu 20.04.4 LTS. Unbuffering the output of
    # 'man -awK' is important because it can take a long time to run.
done 3< <(unbuffer man -awK --regex -- "${arg_search}")

```