Для выполнения VIM в не интерактивном режиме, вы можете использовать или +{command}
/ -c {command}
или -s
параметр , который позволит вам выполнять команды VIM после первого файла считаны.
Проверьте несколько примеров ниже.
Простой стандартный ввод и вывод с использованием каналов может быть достигнут командой:
$ echo Example | vim -es '+:wq! /dev/stdout' /dev/stdin | cat
Чтобы отредактировать один файл и сохранить изменения в другом:
$ vim -es '+:0,$s/127/128/g' '+:wq! new_file' /etc/hosts
$ cat file1 file2 | vim - -es '+:0,$s/foo/test/g' '+:wq! file3'
Чтобы редактировать файл на месте, вы можете использовать его -s {scriptin}
для чтения файла сценария, например:
$ echo ':0,$s/foo/test/ge' > cmds.txt
$ echo ':wq' >> cmds.txt
$ vim -s cmds.txt -es file
Чтобы проанализировать файл и отправить его на конвейер, вы можете попробовать следующее:
$ cat /etc/hosts | vim -es '+:0,$s/127/128/g' '+%print' '+:q!' /dev/stdin | cat
или:
$ cat /etc/hosts | vim -es '+:0,$s/127/128/g' '+:wq! /dev/stdout' /dev/stdin | cat
Подробнее: Как редактировать файлы не в интерактивном режиме (например, в конвейере)? на Vim SE