ハマったので書き残しておく。
例えば、グローバル変数g:foo
にsourceしたいファイルのパスが代入されているとして、普通にsource g:foo
とするとg:foo
がそのままファイル名と解釈されてエラーになる。
let g:foo = "/foo/bar.vim"
"error E484
source g:foo
vimscriptの式の結果をファイル名として渡したいときは、式を`=
~ `
で囲んでやればいいらしい。
source `=g:foo`
参考
:help `=