O Vim precisa de sua entrada padrão para ser o terminal no qual você inserirá os comandos, mas obterá /dev/null
ou o canal de grep
dependendo da implementação xargs
.
Você pode restaurar a entrada padrão por meio de um shell intermediário.
grep -rl test . | xargs sh -c 'vim -- "$@" <$0' /dev/tty
Se os nomes dos arquivos não contiverem nenhum caractere de espaços em branco ou qualquer um de \[?*
, você poderá usar a substituição de comandos:
vim $(grep -rl test .)
Uma maneira de lidar com caracteres especiais (além de nova linha) é restringir a divisão de palavras a novas linhas e desativar globbing.
(IFS='
'; set -f; exec vim $(grep -rl test .))