Alternatives
Unless you really need special Vim capabilities, you're probably better off using non-interactive tools like sed
, awk
, or Perl / Python / Ruby / your favorite scripting language here.
That said, you can use Vim non-interactively:
Silent Batch Mode
For very simple text processing (i.e. using Vim like an enhanced 'sed' or 'awk', maybe just benefitting from the enhanced regular expressions in a :substitute
command), use Ex-mode.
REM Windows call vim -N -u NONE -n -i NONE -es -S "commands.ex" "filespec"
Note: silent batch mode (:help -s-ex
) messes up the Windows console, so you may have to do a cls
to clean up after the Vim run.
# Unix vim -T dumb --noplugin -n -i NONE -es -S "commands.ex" "filespec"
Attention: Vim will hang waiting for input if the "commands.ex"
file doesn't exist; better check beforehand for its existence! Alternatively, Vim can read the commands from stdin. You can also fill a new buffer with text read from stdin, and read commands from stderr if you use the -
argument.
Full Automation
For more advanced processing involving multiple windows, and real automation of Vim (where you might interact with the user or leave Vim running to let the user take over), use:
vim -N -u NONE -n -c "set nomore" -S "commands.vim" "filespec"
Here's a summary of the used arguments:
-T dumb Avoids errors in case the terminal detection goes wrong. -N -u NONE Do not load vimrc and plugins, alternatively: --noplugin Do not load plugins. -n No swapfile. -i NONE Ignore the |viminfo| file (to avoid disturbing the user's settings). -es Ex mode + silent batch mode -s-ex Attention: Must be given in that order! -S ... Source script. -c 'set nomore' Suppress the more-prompt when the screen is filled with messages or output to avoid blocking.
:%s/\n\n//d
supposed to do? If I try it I getTrailing characters
as the error message. So I think you either meang
or no modifier; or just do:g/^$/d
. That said, I'd do this in perl using the-i
and-pe
options.