How can I run Unix commands while I'm inside vim?
5 Answers
Go to command mode Esc, then run :!unix_command. Anything run from the : prompt starting with a bang ! will be run as a unix shell command. You'll be shown the output and allowed to hit a key to get back to your work in vim.
If you have text selected in visual mode and want to send it TO a command as STDIN, hit !! and enter your command. The results of the command will replace the text you have selected.
- 5,900
From a VIM help mirror:
:shell :sh[ell] start a shell
:! :!{command} execute {command} with a shell
If you are running neovim, or vim 8.1 or later, there is also terminal.
:terminal :terminal {cmd} open a terminal window
- 1,421
- 3
- 13
- 24
-
3If you are using neovim in place of vim,
:shellis replaced with the more powerful:terminal. See here. – ZaydH Jun 17 '21 at 01:51
In addition to the above answers, you can use the current vim buffer content as stdin for shell command using :%!.
For example, suppose you want to filter lines from the current vim window content to contain only those with substring ca inside them. You could use:
:%! grep ca
Which will automatically filter the lines, placing the grep output instead of the current lines.
- 399
- 3
- 5
Use :!(colon bang) followed by the command you wish to run(:!{command}) to run external commands from Vim. The output of the command will then be returned for you to view. Note that you will need to wait for the command to finish running before you can continue editing because Vim is single threaded(this can be a problem with commands that take a long time to execute). See this page in the Vim help manual for further reading.
- 154
You have to switch into File exporing mode with: :Vexplore, :Sexplore or :Explore (all accept path as an argument).
Then you can you press either % for creating a regular file or d for a directory. You will be prompted about the name.
That's the VIM native way, there is no need for running external shell.
- 101
!!without any text selected will let you run a command and then insert the result at your current cursor position -- no need to send stuff to STDIN and replace it if you don't need/want to. – Kromey May 18 '11 at 23:36:r!unix_command. This is usefull for commands such asdate– Yab May 19 '11 at 06:01:10,20!shor, form marked lines,'a,'b!sh– jlliagre May 19 '11 at 11:58!!? When I run:!!- it just run previous command, but output not stored in buffer or in opened file. – skywinder Sep 09 '20 at 08:48:r!ps aux | grep vim | awk '{ print $2 }' | xargs kill -9? – dovidweisz Feb 08 '21 at 15:26:!pkill -9 vimdoes the same work better. Or, you know,:qa!still has the fun of a bang without needing to spawn shell processes for nothing but show. – Caleb Feb 08 '21 at 16:26