Você precisa usar uma descrição de arquivo diferente de stdin se quiser executar algo interativo dentro do loop.
#!/bin/bash
while read -r file <&3; do
vim "$file"
done 3< <(find . -type f)
Como alternativa, com separadores de bytes nulos para suportar nomes de arquivos incomuns:
#!/bin/bash
while IFS= read -r -d '' file <&3; do
vim -- "$file"
done 3< <(find . -type f -print0)
A saída de find
é alimentada com a ajuda da substituição de processo para o descritor de arquivo 3, que é então alimentado para read
a <&3
.