:redir >name_of_registers_file :registers :redir END :r name_of_registers_file :help redir
最后一个命令是非常有用的,因为有很多重定向选项:变量,寄存器,如何附加,进一步的聚宝盆。
我仍然发现它奇怪,令人讨厌的是,它使用END的方式,但由于一切可以跟随redir必须开始一个非字字符,至少它不含糊。
PS AFAIK(在这种情况下是相当遥远)没有办法直接读入缓冲区:你必须先将它存储在寄存器或变量。检查帮助的各种选项如何做到这一点。
PPS如果你想使用一个变量-maybe把它封装在一个函数中,并避免clobbering寄存器或全局变量 – 你必须将写入变量的多行字符串转换为一个列表。例如
:call append( '.',split(variable_you_redirected_to,"\n") )
否则(如果你只是做append(‘。’,var)),你会得到^ @'(nulls)而不是换行符,因为这是vimscript用来表示字符串变量的换行符。
编辑:as @Bill Odom提到,使用:put = variable_you_redirected_to比复杂的append()表达式容易得多。谢谢,比尔!
PPPS
我写了一个snippet,使这个东西更方便。它声明一个函数Redir(命令,目标)和命令R.
该命令将最后一系列非空格字符解析为重定向目标,并将其传递给函数,该函数执行将命令输出重定向到重定向目标的样板。
该命令是R之后和最后一个空格之前的所有内容。
例如
" Store the vim buffer list in buffer_list.txt :R ls >buffer_list.txt " Store error messages emitted by a function being debugged " in the 'unnamed register' :R call FunctionBeingDebugged() @">
这里有一些限制:例如,您将无法写入包含空格的文件名。这一点的好处是,你不必引用你的命令。我已经发布在gist.github.com,如果我最终改进它,我会尽量保持更新。或者你可以自己fork它< / noeuphemism>!