Para executar o vim no modo não interativo, você pode usar o parâmetro +{command}
/ -c {command}
ou -s
, que permitirá a execução dos comandos vim após a leitura do primeiro arquivo.
Confira alguns exemplos abaixo.
Entradas e saídas padrão simples usando pipes podem ser obtidas 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 forma não interativa (por exemplo, em pipeline)? no Vim SE