gpt4 book ai didi

vim - 在 vim 中将 ex 命令重定向到 STDOUT

转载 作者:行者123 更新时间:2023-12-04 16:47:32 24 4
gpt4 key购买 nike

我正在尝试编写一个命令来将 vim 的突出显示信息转储到 STDOUT。我可以成功写入这样的文件:

vim +'redir >outfile' +'hi' +'redir END' +'q'

在此之后, outfile包含我想要的。但我宁愿输出到 STDOUT 以通过管道传输到一个将突出显示信息转换为 CSS 的命令。

这种方法尝试将命令重定向到寄存器,写入当前缓冲区,然后将该输出发送到 tee .
vim -E +'redir @a' +'silent! hi' +'redir END' +'put a' +'w !tee' +'q!' > outfile

这非常接近,但输出前导分页消息(还有 255 行......)和一些 ANSI 转义废话。设置 nomore没有为我压制消息。我希望将确切的输出发送到 outfile在 STDOUT 的第一个命令中。

最佳答案

Vim 支持输出到 stderr,我们可以将其重定向到 stdout 来解决您的问题。不过请注意,此功能仅用于调试目的,因此它有一些优势。这是如何做到这一点的简短草图。

首先,我们将在静默或批处理模式下运行 Vim,这是通过 -e 启用的。 -s标志( :h -s-ex )。我们禁用交换文件 -n因为如果我们需要在 Vim 卡住时杀死它,它们会很麻烦。

我们没有将 Ex 命令作为命令行参数传递,而是使用 -S 获取脚本文件。 .创建文件 hi.vim内容如下:

verbose highlight

:verbose 必须使 Vim 输出 :highlight给标准错误的消息。让我们看看到目前为止我们有什么:
$ vim -n -e -s -S hi.vim

暂时不要运行它,否则你会陷入 headless Vim 的黑暗中!

添加 :quit命令并将标准错误重定向到标准输出:
$ vim -n -e -s -S hi.vim +quit 2>&1

瞧!现在,根据您的意愿将这些乱七八糟的东西传送到任何文件或实用程序中。

有一篇关于这个主题的非常详尽的 wiki 文章,“ Vim as a system interpreter for vimscript”。

更好的观点:由于 Vim 与终端环境的交互方式,它无法在批处理模式输出中编写正确的 unix LF 行结尾。相反,它写入看起来像 CRLF 行结尾的行结尾。

考虑添加一个过滤器来摆脱那些:
$ vim -n -e -s -S hi.vim +quit 2>&1 | tr -d '\r' | my-css-util

这回答了如何“将 ex 命令重定向到 vim 中的 STDOUT”的一般问题,但它不一定适用于您的 :hi问题,因为这个约束引起的 -e -s标志:

'term' and $TERM are not used.

关于vim - 在 vim 中将 ex 命令重定向到 STDOUT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16739300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com