加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 09:18:04 所属栏目:安全 来源:网络整理
导读:如何将ex命令的输出重定向或管道到我当前的缓冲区或文件? 例如,我想将所有寄存器的内容读入当前缓冲区,在ex模式下使用:寄存器。 :redir name_of_registers_file:registers:redir END:r name_of_registers_file:help redir 最后一个命令是非常有用的,因
如何将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中的文件。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读