Vim将表达式转换为文件

时间:2014-01-30 08:47:07

标签: vim

我正在尝试编写一个函数,它接受vim打开的文件并将其移动到标准目录。我的脚本检出当前缓冲区的名称,获取当前文件路径的头部,然后将其转换为表达式,将其存储在变量中,然后操纵表达式,使其成为我想要的路径。 之后,我尝试使用saveas将缓冲区保存在新位置。

但是,saveas接收{file}类型的参数。 如何将表达式转换为文件类型?

2 个答案:

答案 0 :(得分:2)

您需要使用execute

exe 'saveas ' . g:filepath

有关详细信息,请参阅h :exe

答案 1 :(得分:2)

Vimscript的评估方式与:命令行中输入的Ex命令完全相同。 ex中没有变量,因此无法指定它们。以交互方式键入命令时,您可能使用<C-R>=来插入变量内容:

:sleep <C-R>=timetowait<CR>m<CR>

...但在脚本中,必须使用:execute。必须引用Ex命令的所有文字部分(单引号或双引号),然后与变量连接:

execute 'sleep' timetowait . 'm'

逃逸

对于像文件名这样的参数,您必须考虑某些字符是特殊的(:help cmdline-special;例如%替换为当前缓冲区名称),并且应该转义空格。因此,您需要通过fnameescape()函数处理变量:

:execute 'saveas' fnameescape(g:filepath)