How can I execute a Vim selection or range in bash without replacing it?

I'd like to select some text in vim and then execute it in bash. I know of the following procedure:

  1. select text using V or v
  2. :!!

However, this replaces the selection with the output of the command. What if I don't want that?


Solution 1:

Type the :w command like this:

:w !command

As you type it, it will appear like this:

:'<,'>w !command

See

:help :w_c

Solution 2:

In vim 8.0, you can select a range of lines and run :terminal bash. This will open a terminal running bash with your selection as stdin.

:terminal node, :terminal ruby, :terminal python seem to work nicely as well.