Vous avez presque terminé :
$ locate updatedb | head -1 | xargs vim
parfois (sous certains terminaux), vous devez réinitialiser le terminal après l'édition.
$ reset
En tant qu'éditeur interactif, Vim a besoin à la fois de stdin et de stdout, donc l'utiliser dans un tube est problématique et met Vim en garde à ce sujet. Pour un seul fichier, la substitution de processus résout ce problème facilement :
vim "$(locate updatedb | head -1)"
Vous pouvez également utiliser des backticks, et cela fonctionne même dans Vim lui-même :
:edit `locate updatedb | head -1`
En plus de la réponse ci-dessus, pour éviter la "corruption du terminal" indiquée par Jacobo de Vera dans le commentaire, utilisez l'option xargs -o
ou --open-tty
pour faire supposer à vim que l'entrée provient d'un terminal, pas de stdin.
$ locate updatedb | head -1 | xargs -o vim
Voir :https://unix.stackexchange.com/a/44428/307359