Pour exécuter vim en mode non interactif, vous pouvez utiliser un paramètre +{command}
/ -c {command}
ou -s
qui vous permettra d'exécuter les commandes vim après la lecture du premier fichier.
Vérifiez quelques exemples ci-dessous.
Des entrées et sorties standard simples à l'aide de tuyaux peuvent être obtenues par la commande:
$ echo Example | vim -es '+:wq! /dev/stdout' /dev/stdin | cat
Pour modifier un fichier et enregistrer les modifications dans un autre:
$ vim -es '+:0,$s/127/128/g' '+:wq! new_file' /etc/hosts
$ cat file1 file2 | vim - -es '+:0,$s/foo/test/g' '+:wq! file3'
Pour éditer le fichier sur place, vous pouvez utiliser -s {scriptin}
pour que le fichier de script soit lu, par exemple:
$ echo ':0,$s/foo/test/ge' > cmds.txt
$ echo ':wq' >> cmds.txt
$ vim -s cmds.txt -es file
Pour analyser le fichier et l'envoyer à la sortie du pipeline, vous pouvez essayer ce qui suit:
$ 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
Voir plus: Comment éditer des fichiers de manière non interactive (par exemple dans un pipeline)? à Vim SE