tags:

views:

121

answers:

5

TextMate has a nice feature that allows you to execute a script from within the current context and shows you the output in a separate window. This lets you write and test code on the go. I'm almost certain there is a similar feature with MacVim/gVIM, but I'm not sure what it is. Currently I save my buffers to disk, then go to the command line and execute the script in that respect. How do I improve that workflow with vim?

+7  A: 

You can do this in vim using the ! command. For instance to count the number of words in the current file you can do:

:! wc %

The % is replaced by the current filename. To run a script you could call the interpreter on the file - for instance if you are writing a perl script:

:! perl %
jts
+1  A: 

It sounds like you're looking for !:

:!{cmd} Execute {cmd} with the shell.

You can use % to denote the current filename, if you need to pass it to the script:

!proofread-script %

You can also use ! with a range, to use the command as a filter:

!{motion}{filter}    " from normal mode
:{range}!{filter}    " from command mode

(In the first case, as with many other commands, when you type the motion, it'll pass you into command mode, converting the motion into a range, e.g. :.,.+2!)

And finally, if you don't actually need to pass input from your file, but want the output in your file, that's essentially a trivial filter, and the fastest way to do it is !!{cmd}. This will replace the current line with the output of the command.

Jefromi
+1  A: 

You could run it right from vim:

:!./script.sh

Amardeep
A: 

save the file and call the script using an interpreter

eg.:

:!python %
Nikolaus Gradwohl
A: 

Well it depends on your OS - actually I did not test it on M$ Window$ - but Conque is one of the best plugins around there: http://code.google.com/p/conque/

Actually, it can be better, but works. You can embed a shell window in a vim "window".

Zsolt Botykai