Eu posso reproduzir isso e, de fato, parece bastante intrigante. Uma coisa complicada é que :set backupdir?
não imprime necessariamente o valor da opção real; ele realiza algumas transformações, então o que você vê nem sempre é o que é usado.
Acho que o problema está no uso do ~/
na variável $VIMFILES
. Quando você diretamente :set
a opção (como emulado pela última :execute
tentativa), o Vim parece expandir isso automaticamente. Mas quando você atribui isso a uma variável de ambiente, ela é mantida literalmente e, devido à falta de expansão, o :write
falha. Observe que a saída é idêntica porque o Vim aparentemente traduz automaticamente /home/username
de volta para ~
na saída.
Eu resolveria isso expandindo explicitamente o valor da variável:
let $VIMFILES = expand("~/.vim")