Como :help :cexpr diz, a expressão que segue :cexpr pode ser uma string ou uma lista. Nenhuma das expressões que você tentou avaliar para uma string ou lista da saída de cc . No entanto, :help :cexpr fornece um exemplo que pode ajudá-lo.
:cexpr system('grep -n xyz *')
:cgetexpr é igual a :cexpr , mas não pula para o primeiro erro.
verifiquei que
:cgetexpr system("cc hello.c")
funciona, mas colocar variáveis nesse comando é um pouco mais de trabalho. O seguinte insere o nome do arquivo atual no comando.
:exe 'cgetexpr system("cc '.expand('%').'")'