在vim中保存新文件,其中filename存储在寄存器中?

时间:2017-01-27 11:30:39

标签: vim

我有一个文件存储文件名和单词内容,如

filename1 this is some content
filename2 this is some content

我已经编写了可以创建新文件并填充字段的宏,我保存的问题是可以将文件保存到filename*吗?目前我已将文件名存储到vim寄存器,但不确定如何保存到该文件。

1 个答案:

答案 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)

是否必须是Vim?

此外,这样的任务可能更容易用脚本语言(通常作为单行)执行,例如,在Python或Perl中。