Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim-写入vimscript变量中的文件名_Vim - Fatal编程技术网

Vim-写入vimscript变量中的文件名

Vim-写入vimscript变量中的文件名,vim,Vim,我在做类似的事情 :let foo="bar" :echom foo bar :w foo "foo" [New File] 0 lines, 0 characters written 我希望写一个名为“bar”的文件,而不是名为“foo”的文件。假设变量“foo”中存储了一个字符串,如何将当前缓冲区写入名为该字符串的文件 顺便问一下,有人能解释一下:wfoo和:echom foo在foo方面有什么不同吗? :execute 'write ' . foo<CR> :执行“写入”。

我在做类似的事情

:let foo="bar"
:echom foo
bar
:w foo
"foo" [New File] 0 lines, 0 characters written
我希望写一个名为“bar”的文件,而不是名为“foo”的文件。假设变量“foo”中存储了一个字符串,如何将当前缓冲区写入名为该字符串的文件

顺便问一下,有人能解释一下
:wfoo
:echom foo
foo
方面有什么不同吗?

:execute 'write ' . foo<CR>
:执行“写入”。福

:write=foo
做你想做的

变量可以在串联中使用,情况1,也可以在表达式中使用,情况2。

Vimscript求值规则 Vimscript的计算方法与在
命令行中键入的Ex命令完全相同。
ex
中没有变量,因此无法指定它们。以交互方式键入命令时,您可能会使用
=
插入变量内容:

:sleep <C-R>=timetowait<CR>m<CR>
与上面的
:execute
类似,
:echo[msg
命令的特殊之处在于,它接受一个变量参数,而大多数命令(如
:write
)不接受,并按字面意思处理参数

你的特殊问题 如上所述,您的问题最好通过
execute
解决:

:execute 'write' foo
但是,请注意,如果
foo
包含任何常规文件名,则仍需要对
:write
函数进行转义,该函数理解一些特殊符号(例如
%
表示当前缓冲区名称),并且喜欢转义空格:

:execute 'write' fnameescape(foo)
:execute 'write' foo
:execute 'write' fnameescape(foo)