vim +'redir >outfile' +'hi' +'redir END' +'q'
在此之后,outfile包含我想要的内容.但我宁愿输出到STDOUT来管道转换为突出显示信息的命令.
此方法尝试将命令重定向到寄存器,写入当前缓冲区,然后将该输出发送到tee.
vim -E +'redir @a' +'silent! hi' +'redir END' +'put a' +'w !tee' +'q!' > outfile
这非常接近,但输出一个主要的分页消息(另外255行…)和一些ANSI转义废话.设置nomore并没有为我压制消息.我希望将第一个命令中发送到outfile的确切输出发送到STDOUT.
解决方法
首先,我们将以静默或批处理模式运行Vim,它使用-e -s标志(:h -s-ex
)启用.我们禁用交换文件-n因为如果我们需要在它被卡住时杀死Vim它们会很麻烦.
我们不是将Ex命令作为命令行参数传递,而是使用-S来源脚本文件.使用以下内容创建hi.vim文件:
verbose highlight
:verbose
是必要的,使Vim输出:突出显示消息给stderr.让我们看看到目前为止我们有什么:
$vim -n -e -s -S hi.vim
不要跑这个,否则你会陷入无头Vim的黑暗中!
$vim -n -e -s -S hi.vim +quit 2>&1
瞧!现在根据你的心愿把这个烂摊子送到任何文件或工具中.
关于这个主题,有一篇非常详尽的维基文章“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
这回答了如何“将命令重定向到vim中的STDOUT”的一般问题,但它不一定适用于你的:hi问题,因为-e -s标志引起的这种约束:
‘term’ and $TERM are not used.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。