我有一个文件存储文件名和单词内容,如
filename1 this is some content
filename2 this is some content
我已经编写了可以创建新文件并填充字段的宏,我保存的问题是可以将文件保存到filename*
吗?目前我已将文件名存储到vim寄存器,但不确定如何保存到该文件。
答案 0 :(得分:4)
Vimscript的评估方式与:
命令行中输入的Ex命令完全相同。 ex
中没有变量,因此无法指定它们。以交互方式键入命令时,您可能使用<C-R>
插入变量或注册内容:
:write <C-R>a<CR>
...但在脚本中,必须使用:execute
。必须引用Ex命令的所有文字部分(单引号或双引号),然后与变量连接;对于寄存器,请使用特殊的@
sigil:
execute 'write' @a
要处理文件名中的特殊字符,请添加:
execute 'write' fnameescape(@a)
如果每一行对应一个文件及其内容(并且你有许多这样的行),那么创建一个新缓冲区并保存它(在宏中)将需要相当长的时间。您也可以使用低级writefile()
函数并跳过缓冲区创建:
:global/^/ let [filename, content] = matchlist(getline('.'), '\(\S\+\)\s\(.*\)')[1:2] | call writefile([content], filename)
此外,这样的任务可能更容易用脚本语言(通常作为单行)执行,例如,在Python或Perl中。