Vim:这两种设置变量的方法有什么区别?

Vim:这两种设置变量的方法有什么区别?

在我的.vimrc,我定义了以下变量:

let $VIMFILES = "~/.vim"

在我的.vimrcbackupdir,我尝试像这样设置选项:

set backupdir=$VIMFILES/backup
" `set backupdir?` will return: backupdir=~/.vim/backup

但是,它不起作用。尝试访问:w文件将失败并返回以下内容:

"foo" E510: Can't make backup file (add ! to override)

奇怪的是,backupdir使用以下方法设置效果很好......

exec "set backupdir=" . $VIMFILES . "/backup"
" Like the first method, `set backupdir?` will
" also return: backupdir=~/.vim/backup

尽管两种情况下都具有所需的值,但有人可以解释为什么第一种方法失败而第二种方法有效吗backupdir? 我是否使用了任何不适当的技术? 如果是,我应该使用什么来代替?

答案1

我可以重现这一点,而且确实看起来相当令人费解。一个棘手的事情是,它:set backupdir?不一定打印实际的选项值;它会执行一些转换,因此您看到的并不总是实际使用的。

~/我认为问题在于变量中的 的使用$VIMFILES。当您直接:set使用选项时(如上次:execute尝试所模拟的),Vim 似乎会自动扩展它。但是当您将其分配给环境变量时,它会被逐字保留,并且由于缺乏扩展, 会失败:write。请注意,输出是相同的,因为 Vim 显然会自动在输出中转换/home/username回。~

我将通过明确扩展变量值来解决这个问题:

let $VIMFILES = expand("~/.vim")

相关内容