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

12

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?

Klaas van Schelven

Posted 2011-08-31T16:16:20.033

Reputation: 397

Answers

20

Type the :w command like this:

:w !command

As you type it, it will appear like this:

:'<,'>w !command

See

:help :w_c

garyjohn

Posted 2011-08-31T16:16:20.033

Reputation: 29 085

3This is correct, but take care not to do :w! command by mistake. If command is a program you have write access to, it'll overwrite the program, and you won't be able to undo the change since that wasn't the buffer that was open. – Ray – 2016-10-12T19:26:29.433

5

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.

user1480704

Posted 2011-08-31T16:16:20.033

Reputation: 151