Só porque você correu
vi demo.c
não significa que o arquivo demo.c foi criado. Não é criado até que você escreva o buffer no disco pela primeira vez.
Basta escrever o buffer no disco antes de compilar:
:w
Isso é confirmado pela mensagem [No write since last change] que você vê. Esta mensagem significa que o buffer foi alterado (em que você criou o buffer chamado demo.c ), mas não foi gravado no disco após modificações.