Até onde sei, não existe uma função do Vim que realize o que você está pedindo. Mas eu inventei minha função s:Get_file_perm cujo resultado atribui à variável w:file_perm :
" ...
let w:file_perm=<sid>Get_file_perm()
" ...
function! s:Get_file_perm()
let a=getfperm(expand('%:p'))
if strlen(a)
return a
else
let b=printf("%o", xor(0777,system("umask")))
let c=""
for d in [0, 1, 2]
let c.=and(b[d], 4) ? "r" : "-"
let c.=and(b[d], 2) ? "w" : "-"
let c.=and(b[d], 1) ? "x" : "-"
endfor
return c
endif
endfunction
A função verifica ( if ) para ver se existem as permissões ( getfperm ) para o caminho do arquivo atual ( '%:p' ) ( strlen ). No caso de um novo arquivo ( "" ), o else -block bit a bit subtrai ( xor ) o octal umask do literal octal 0777 ( rwxrwxrwx ) - todos os bits de permissão definidos.
Para o proprietário- ( 0 ), group- ( 1 ) e permissões para outros ( 2 ) iterativamente ( for ) verifica cada read- ( 4 ), write- ( 2 ) e execute ( 1 ) bit que está definido ( and ). Se o bit correspondente for definido, ele anexará ( .= ) "r" , "w" e "x" à variável c , respectivamente. Outro "-" é anexado para simbolizar que a respectiva operação não é permitida.