在 Vim 中,如何将文件保存到存储在变量中的路径?
In Vim, how can I save a file to a path stored in a variable?
这是一个脚本:
:let s:submission_path = expand("%:p:h") . '\submissions\test_submission.csv'
:echo s:submission_path
:write s:submission_path
脚本引发错误 "can't open file for writing",因为我在 windows 并且“:”不是有效的文件名字符。如果我将变量命名为 'submission_path' ,则会写入一个具有该名称的文件(编辑:并且文件的内容如我所料,脚本正在编辑的缓冲区的内容)。
我不明白这个。写入之前的 echo 命令按照我的预期进行,输出我要写入的文件的完整路径。但是 write 似乎忽略了变量值并使用它的名字代替?我需要以某种方式取消引用它吗?
试试这个:
:let s:submission_path = expand("%:p:h") . '\submissions\test_submission.csv'
:echo s:submission_path
:execute "write " . s:submission_path
Execute 将允许您使用字符串操作组合一个 ex 命令,然后执行它。
vim 有非常复杂的评估规则(你只需要学习它们)。 write
不采用表达式,它采用字符串,因此 s:submission_path
按字面意思对待 write
。但是 echo
确实会评估其参数,因此会评估 s:submission_path
。
要执行您想要的操作,您需要使用 execute
命令。
exec 'write' s:submission_path
环境变量没有这个问题,但你必须像在 unix 中那样用美元符号取消引用它们:
:let $submission_path = expand("%:p:h") . '\submissions\test_submission.csv'
:echo $submission_path
:write $submission_path
并且它会在 vim 过程中修改您的环境,所以请注意这一点。
这是一个脚本:
:let s:submission_path = expand("%:p:h") . '\submissions\test_submission.csv'
:echo s:submission_path
:write s:submission_path
脚本引发错误 "can't open file for writing",因为我在 windows 并且“:”不是有效的文件名字符。如果我将变量命名为 'submission_path' ,则会写入一个具有该名称的文件(编辑:并且文件的内容如我所料,脚本正在编辑的缓冲区的内容)。
我不明白这个。写入之前的 echo 命令按照我的预期进行,输出我要写入的文件的完整路径。但是 write 似乎忽略了变量值并使用它的名字代替?我需要以某种方式取消引用它吗?
试试这个:
:let s:submission_path = expand("%:p:h") . '\submissions\test_submission.csv'
:echo s:submission_path
:execute "write " . s:submission_path
Execute 将允许您使用字符串操作组合一个 ex 命令,然后执行它。
vim 有非常复杂的评估规则(你只需要学习它们)。 write
不采用表达式,它采用字符串,因此 s:submission_path
按字面意思对待 write
。但是 echo
确实会评估其参数,因此会评估 s:submission_path
。
要执行您想要的操作,您需要使用 execute
命令。
exec 'write' s:submission_path
环境变量没有这个问题,但你必须像在 unix 中那样用美元符号取消引用它们:
:let $submission_path = expand("%:p:h") . '\submissions\test_submission.csv'
:echo $submission_path
:write $submission_path
并且它会在 vim 过程中修改您的环境,所以请注意这一点。