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)