在Vim中,如何将文件保存到存储在变量中的路径?

时间:2015-02-21 21:20:13

标签: vim

这是在一个脚本中:

:let s:submission_path = expand("%:p:h") . '\submissions\test_submission.csv'
:echo s:submission_path
:write s:submission_path

该脚本引发错误"无法打开文件进行写入",因为我在Windows上':'不是有效的文件名字符。如果我将变量命名为“submission_path'写入具有该名称的文件(编辑:文件的内容与我期望的一样,脚本正在编辑的缓冲区的内容)。

我不明白这一点。写入之前的echo命令执行我期望的操作,输出我想写的文件的完整路径。但写似乎忽略了变量值并使用其名称代替?我需要以某种方式解除引用吗?

3 个答案:

答案 0 :(得分:3)

试试这个:

:let s:submission_path = expand("%:p:h") . '\submissions\test_submission.csv'
:echo s:submission_path
:execute "write " . s:submission_path

执行将允许您使用字符串操作编写ex命令,然后执行它。

答案 1 :(得分:3)

vim有非常棘手的评估规则(你只需要学习它们)。 write不接受带有字符串的表达式,因此s:submission_path按字面意义处理write。但是echo会对其参数进行评估,因此会对s:submission_path进行评估。

要执行您想要的操作,您需要使用execute命令。

exec 'write' s:submission_path

答案 2 :(得分:1)

环境变量没有这个问题,但你必须像unix中那样用美元符号取消引用它们:

:let $submission_path = expand("%:p:h") . '\submissions\test_submission.csv'
:echo $submission_path
:write $submission_path

它会在vim过程中修改你的环境,所以请注意这一点。