Seu comando externo não poderá fazer nada com um número de buffer, você precisará passar um nome de arquivo como argumento. Você pode usar bufname()
para obter o nome do buffer de um buffer específico:
:execute "!g++ " . bufname(2)
Veja :help bufname()
.
Observe que, devido a coisas diferentes (suas opções path
principalmente, mas também do seu compilador), o nome do buffer pode ou não ser exatamente o que você deseja. Você pode usar fnamemodify()
para remover partes de seu caminho ou transformar um caminho relativo em um absoluto ou qualquer outro:
:execute "!g++ " . fnamemodify(bufname(2), ':p:h')
Veja :help fnamemodify()
e o link :help filename-modifiers
.