vim – 如何将ex命令输出重定向到当前缓冲区或文件?

如何将ex命令的输出重定向或管道到我当前的缓冲区或文件

例如,我想将所有寄存器的内容读入当前缓冲区,在ex模式下使用:寄存器。

: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>!

无论如何,代码片段可用here.它可以放入.vimrc文件或〜/ .vim / plugins中的文件

相关文章

解决方案:解决linux下vim乱码的情况:(修改vimrc的内容)全...
Linuxvi/vim所有的UnixLike系统都会内建vi文书编辑器,其他的...
      vim正则匹配:空行:/^$/  /^[\t]*$/注释...
$select-editorSelectaneditor.Tochangelater,run'sele...
上次手贱忘了保存,这次就简单做个备忘吧,把踩过的坑记一下...
Linux之文本编译器小结vim的优势所有的UNIX-LIKE习通都会内置...