Para executar o vim no modo não interativo, você pode usar o parâmetro +{command}
/ -c {command}
ou -s
que permitirá executar os comandos do vim após a leitura do primeiro arquivo.
Veja alguns exemplos abaixo.
Entrada e saída padrão simples usando tubos podem ser alcançadas pelo comando:
$ echo Example | vim -es '+:wq! /dev/stdout' /dev/stdin | cat
Para editar um arquivo e salvar as alterações em outro:
$ vim -es '+:0,$s/127/128/g' '+:wq! new_file' /etc/hosts
$ cat file1 file2 | vim - -es '+:0,$s/foo/test/g' '+:wq! file3'
Para editar o arquivo no local, você pode usar -s {scriptin}
para que o arquivo de script seja lido, por exemplo:
$ echo ':0,$s/foo/test/ge' > cmds.txt
$ echo ':wq' >> cmds.txt
$ vim -s cmds.txt -es file
Para analisar o arquivo e enviá-lo para a saída do pipeline, você pode tentar o seguinte:
$ cat /etc/hosts | vim -es '+:0,$s/127/128/g' '+%print' '+:q!' /dev/stdin | cat
ou:
$ cat /etc/hosts | vim -es '+:0,$s/127/128/g' '+:wq! /dev/stdout' /dev/stdin | cat
Veja mais: Como editar arquivos de maneira não interativa (por exemplo, no pipeline)? na Vim SE