I just wrote a small pipe editor inspired by vipe. It’s a short shell script:

#!/bin/sh

case $1 in
  -h|--help)
      cat <<EOF
Usage:
${0} [command] [arguments...]

${0} is a pipe editor. It read its standard input, opens in a text editor,
and write the result to its standard output.

EXAMPLES

Edit a file a write it into another file:
  cat input | ${0} > output
or
  ${0} < input > output

Edit a file using gvim --nofork, a pipe the result into wc:
  ${0} gvim --nofork < input | wc

To call ${0} without any input, use /dev/null:
  ${0} < /dev/null
EOF
      exit
esac

args=$*

function edit {
  ${args:-${VISUAL:-${EDITOR:-vi}}} $*
}

tmp=`mktemp`
cat > $tmp
edit $tmp < /dev/tty > /dev/tty
cat < $tmp
rm $tmp